PC Review


Reply
Thread Tools Rate Thread

DataGrid Component | Displaying columns of a DataSet as Rows in a DataGrid ?

 
 
Diego TERCERO
Guest
Posts: n/a
 
      18th Dec 2003
Hi...
I'm working on a tool for editing text resources for a family of software
product my company produces.

These text resources are found in a SQL Server database, in a table called
"Resource" with the following structure :
Resource{[id],en,fr,es}
Yes.. these are the only languages supported actually.

A couple of rows in that table would look like this :
id | en | fr | es |
0000001 | Open |Ouvrir | Abrir |
0000002 | Close | Fermer | Cerrar |
etc...

I have a DataSet object, that I have filled with a SqlDataAdapter,
therefore, the first table of my Dataset is called "Resource" and has
exactly the same structure than the Table in the database.

I have a ListBox component that uses this DataSet as its DataSource. Its
DataMember property is the "Resource" table and its display member depends
on which is the primary display language that the user has chosen.

So the typical display of this listbox, if the user has chosen 'en' would be
:
Open
Close
.....

Then, when a user selects one of the list items, I use the selected row to
fill a DataGrid component in order to allow the user to edit all language
versions of the resource in a DataGrid.

Now here comes my problem. If I use a filtered version of this DataSet as
the DataSource of my DataGrid (for example a DataViewManager), the grid will
have exactly the same look than the table I have shown above. That doesn't
work for me, cause some resources could be very long error messages,
therefore, I would like to show each column of the table as a row in the
datagrid, something like this (assuming that I have chosen the item 0000001
Language | Value
en | Close
fr | Fermer
es | Cerrar

As for now, I have manually done this transformation by creating a table
called "ResourceItem" in the DataSource bounded to my DataGrid which I fill
by looping on the columns of the selected row. Here's a sample :

foreach(DataColumn col in drSelectedRow.Tables["Resource"].Columns){
DataRow newGridRow = dsGridDataSet.Tables["ResourceItem"].Rows.NewRow();
newGridRow["Language"] = col.ColumnName;
newGridRow["Value"] = drSelectedRow[col].ToString();
dsGridDataSet.Add(newGridRow);
}

I don't like this solution 'cause it's finally not a matter of datastructure
but a matter of display. I just would like to be able to show the columns of
my original DataSet as rows in my DataGrid. Any idea how can I achieve that
?

Thanxs,

Diego

P.S. : I'm aware of the cool ways to manage Globalization in .Net and
resource files, but this is not my question. The purpose of my tool is to
edit resource files for legacy software programmed in VB6 or in ASP 4.0. So
the edition of resources is to be done with this tool I'm working on in C#
but the edited resource files are intended to be used by other older
software.






 
Reply With Quote
 
 
 
 
Dmitriy Lapshin [C# / .NET MVP]
Guest
Posts: n/a
 
      19th Dec 2003
Hi Diego,

I think as your users will be editing the resources row-by-row, you don't
need the DataGrid at all. Instead, add a layout like this:



Label: [Open [V] (kinda drop-down list)

_____________________________
English text: [_____________________________] (consider multi-line edit?)
_____________________________
French text: [_____________________________] (consider multi-line edit?)
_____________________________
Spanish text: [_____________________________] (consider multi-line edit?)

______________
| Save |
--------------


The text boxes will be data-bound to the corresponding columns of the
filtered DataView.

P.S. Hope my ASCII art won't be mangled :-)

--
Dmitriy Lapshin [C# / .NET MVP]
X-Unity Test Studio
http://x-unity.miik.com.ua/teststudio.aspx
Bring the power of unit testing to VS .NET IDE

"Diego TERCERO" <(E-Mail Removed)> wrote in message
news:3fe23e38$0$6967$(E-Mail Removed)...
> Hi...
> I'm working on a tool for editing text resources for a family of software
> product my company produces.
>
> These text resources are found in a SQL Server database, in a table called
> "Resource" with the following structure :
> Resource{[id],en,fr,es}
> Yes.. these are the only languages supported actually.
>
> A couple of rows in that table would look like this :
> id | en | fr | es |
> 0000001 | Open |Ouvrir | Abrir |
> 0000002 | Close | Fermer | Cerrar |
> etc...
>
> I have a DataSet object, that I have filled with a SqlDataAdapter,
> therefore, the first table of my Dataset is called "Resource" and has
> exactly the same structure than the Table in the database.
>
> I have a ListBox component that uses this DataSet as its DataSource. Its
> DataMember property is the "Resource" table and its display member depends
> on which is the primary display language that the user has chosen.
>
> So the typical display of this listbox, if the user has chosen 'en' would

be
> :
> Open
> Close
> ....
>
> Then, when a user selects one of the list items, I use the selected row to
> fill a DataGrid component in order to allow the user to edit all language
> versions of the resource in a DataGrid.
>
> Now here comes my problem. If I use a filtered version of this DataSet as
> the DataSource of my DataGrid (for example a DataViewManager), the grid

will
> have exactly the same look than the table I have shown above. That doesn't
> work for me, cause some resources could be very long error messages,
> therefore, I would like to show each column of the table as a row in the
> datagrid, something like this (assuming that I have chosen the item

0000001
> Language | Value
> en | Close
> fr | Fermer
> es | Cerrar
>
> As for now, I have manually done this transformation by creating a table
> called "ResourceItem" in the DataSource bounded to my DataGrid which I

fill
> by looping on the columns of the selected row. Here's a sample :
>
> foreach(DataColumn col in drSelectedRow.Tables["Resource"].Columns){
> DataRow newGridRow =

dsGridDataSet.Tables["ResourceItem"].Rows.NewRow();
> newGridRow["Language"] = col.ColumnName;
> newGridRow["Value"] = drSelectedRow[col].ToString();
> dsGridDataSet.Add(newGridRow);
> }
>
> I don't like this solution 'cause it's finally not a matter of

datastructure
> but a matter of display. I just would like to be able to show the columns

of
> my original DataSet as rows in my DataGrid. Any idea how can I achieve

that
> ?
>
> Thanxs,
>
> Diego
>
> P.S. : I'm aware of the cool ways to manage Globalization in .Net and
> resource files, but this is not my question. The purpose of my tool is to
> edit resource files for legacy software programmed in VB6 or in ASP 4.0.

So
> the edition of resources is to be done with this tool I'm working on in C#
> but the edited resource files are intended to be used by other older
> software.
>
>
>
>
>
>


 
Reply With Quote
 
Le Big Mac
Guest
Posts: n/a
 
      19th Dec 2003
Hi Dimitry,
I have thought about this solution.
The problem is that I wanted to use a DataGrid because the number of
available languages is not fixed : it is supposed to be known dynamically.
That means, that my DataGrid is bounded to a DataSet that has a structure
that I don't know at design time, only at runtime (I give users the
possibility to open a specific Resource table, whose structure I don't know
yet).

So a solution would be to dynamically create labels and textboxes and bound
them to the Resources dataset after having guessed which structure this
DataSet has (remember that sometimes there might be more than French,
English or Spanish... resources).

I think that doing this results in code complication, performance overhead,
and amounts the risk of generating exceptions, this is tipically the kind of
situation for which the DataGrid is pretty wel suited.

Now... my only problem is that I need to adapt its look to my issue :
display rows as columns.
I know this is possible because I've found in Google a resource that
speciffically adresses this issue, but the link is dead !

Thanxs for your help.

Diego

"Dmitriy Lapshin [C# / .NET MVP]" <x-(E-Mail Removed)> a ecrit
dans le message de news:%(E-Mail Removed)...
> Hi Diego,
>
> I think as your users will be editing the resources row-by-row, you don't
> need the DataGrid at all. Instead, add a layout like this:
>
>
>
> Label: [Open [V] (kinda drop-down list)
>
> _____________________________
> English text: [_____________________________] (consider multi-line edit?)
> _____________________________
> French text: [_____________________________] (consider multi-line edit?)
> _____________________________
> Spanish text: [_____________________________] (consider multi-line edit?)
>
> ______________
> | Save |
> --------------
>
>
> The text boxes will be data-bound to the corresponding columns of the
> filtered DataView.
>
> P.S. Hope my ASCII art won't be mangled :-)
>
> --
> Dmitriy Lapshin [C# / .NET MVP]
> X-Unity Test Studio
> http://x-unity.miik.com.ua/teststudio.aspx
> Bring the power of unit testing to VS .NET IDE
>
> "Diego TERCERO" <(E-Mail Removed)> wrote in message
> news:3fe23e38$0$6967$(E-Mail Removed)...
> > Hi...
> > I'm working on a tool for editing text resources for a family of

software
> > product my company produces.
> >
> > These text resources are found in a SQL Server database, in a table

called
> > "Resource" with the following structure :
> > Resource{[id],en,fr,es}
> > Yes.. these are the only languages supported actually.
> >
> > A couple of rows in that table would look like this :
> > id | en | fr | es |
> > 0000001 | Open |Ouvrir | Abrir |
> > 0000002 | Close | Fermer | Cerrar |
> > etc...
> >
> > I have a DataSet object, that I have filled with a SqlDataAdapter,
> > therefore, the first table of my Dataset is called "Resource" and has
> > exactly the same structure than the Table in the database.
> >
> > I have a ListBox component that uses this DataSet as its DataSource. Its
> > DataMember property is the "Resource" table and its display member

depends
> > on which is the primary display language that the user has chosen.
> >
> > So the typical display of this listbox, if the user has chosen 'en'

would
> be
> > :
> > Open
> > Close
> > ....
> >
> > Then, when a user selects one of the list items, I use the selected row

to
> > fill a DataGrid component in order to allow the user to edit all

language
> > versions of the resource in a DataGrid.
> >
> > Now here comes my problem. If I use a filtered version of this DataSet

as
> > the DataSource of my DataGrid (for example a DataViewManager), the grid

> will
> > have exactly the same look than the table I have shown above. That

doesn't
> > work for me, cause some resources could be very long error messages,
> > therefore, I would like to show each column of the table as a row in the
> > datagrid, something like this (assuming that I have chosen the item

> 0000001
> > Language | Value
> > en | Close
> > fr | Fermer
> > es | Cerrar
> >
> > As for now, I have manually done this transformation by creating a table
> > called "ResourceItem" in the DataSource bounded to my DataGrid which I

> fill
> > by looping on the columns of the selected row. Here's a sample :
> >
> > foreach(DataColumn col in drSelectedRow.Tables["Resource"].Columns){
> > DataRow newGridRow =

> dsGridDataSet.Tables["ResourceItem"].Rows.NewRow();
> > newGridRow["Language"] = col.ColumnName;
> > newGridRow["Value"] = drSelectedRow[col].ToString();
> > dsGridDataSet.Add(newGridRow);
> > }
> >
> > I don't like this solution 'cause it's finally not a matter of

> datastructure
> > but a matter of display. I just would like to be able to show the

columns
> of
> > my original DataSet as rows in my DataGrid. Any idea how can I achieve

> that
> > ?
> >
> > Thanxs,
> >
> > Diego
> >
> > P.S. : I'm aware of the cool ways to manage Globalization in .Net and
> > resource files, but this is not my question. The purpose of my tool is

to
> > edit resource files for legacy software programmed in VB6 or in ASP 4.0.

> So
> > the edition of resources is to be done with this tool I'm working on in

C#
> > but the edited resource files are intended to be used by other older
> > software.
> >
> >
> >
> >
> >
> >

>



 
Reply With Quote
 
Dmitriy Lapshin [C# / .NET MVP]
Guest
Posts: n/a
 
      19th Dec 2003
Standard Windows Forms datagrid cannot display data with rows and columns
swapped. You should probably consider a 3rd party component, or indeed
transpose the data programatically - I think it's pretty viable solution for
your application.

I know I will be flamed for this, but, after all, the users of your
application don't care how perfect it's design is - what they care about is
how convenient and reliable it is.

--
Dmitriy Lapshin [C# / .NET MVP]
X-Unity Test Studio
http://x-unity.miik.com.ua/teststudio.aspx
Bring the power of unit testing to VS .NET IDE

"Le Big Mac" <(E-Mail Removed)> wrote in message
news:3fe2df59$0$1167$(E-Mail Removed)...

> Hi Dimitry,
> I have thought about this solution.
> The problem is that I wanted to use a DataGrid because the number of
> available languages is not fixed : it is supposed to be known dynamically.
> That means, that my DataGrid is bounded to a DataSet that has a structure
> that I don't know at design time, only at runtime (I give users the
> possibility to open a specific Resource table, whose structure I don't

know
> yet).
>
> So a solution would be to dynamically create labels and textboxes and

bound
> them to the Resources dataset after having guessed which structure this
> DataSet has (remember that sometimes there might be more than French,
> English or Spanish... resources).
>
> I think that doing this results in code complication, performance

overhead,
> and amounts the risk of generating exceptions, this is tipically the kind

of
> situation for which the DataGrid is pretty wel suited.
>
> Now... my only problem is that I need to adapt its look to my issue :
> display rows as columns.
> I know this is possible because I've found in Google a resource that
> speciffically adresses this issue, but the link is dead !
>
> Thanxs for your help.
>
> Diego
>
> "Dmitriy Lapshin [C# / .NET MVP]" <x-(E-Mail Removed)> a

ecrit
> dans le message de news:%(E-Mail Removed)...
> > Hi Diego,
> >
> > I think as your users will be editing the resources row-by-row, you

don't
> > need the DataGrid at all. Instead, add a layout like this:
> >
> >
> >
> > Label: [Open [V] (kinda drop-down list)
> >
> > _____________________________
> > English text: [_____________________________] (consider multi-line

edit?)
> > _____________________________
> > French text: [_____________________________] (consider multi-line

edit?)
> > _____________________________
> > Spanish text: [_____________________________] (consider multi-line

edit?)
> >
> > ______________
> > | Save |
> > --------------
> >
> >
> > The text boxes will be data-bound to the corresponding columns of the
> > filtered DataView.
> >
> > P.S. Hope my ASCII art won't be mangled :-)
> >
> > --
> > Dmitriy Lapshin [C# / .NET MVP]
> > X-Unity Test Studio
> > http://x-unity.miik.com.ua/teststudio.aspx
> > Bring the power of unit testing to VS .NET IDE
> >
> > "Diego TERCERO" <(E-Mail Removed)> wrote in message
> > news:3fe23e38$0$6967$(E-Mail Removed)...
> > > Hi...
> > > I'm working on a tool for editing text resources for a family of

> software
> > > product my company produces.
> > >
> > > These text resources are found in a SQL Server database, in a table

> called
> > > "Resource" with the following structure :
> > > Resource{[id],en,fr,es}
> > > Yes.. these are the only languages supported actually.
> > >
> > > A couple of rows in that table would look like this :
> > > id | en | fr | es |
> > > 0000001 | Open |Ouvrir | Abrir |
> > > 0000002 | Close | Fermer | Cerrar |
> > > etc...
> > >
> > > I have a DataSet object, that I have filled with a SqlDataAdapter,
> > > therefore, the first table of my Dataset is called "Resource" and has
> > > exactly the same structure than the Table in the database.
> > >
> > > I have a ListBox component that uses this DataSet as its DataSource.

Its
> > > DataMember property is the "Resource" table and its display member

> depends
> > > on which is the primary display language that the user has chosen.
> > >
> > > So the typical display of this listbox, if the user has chosen 'en'

> would
> > be
> > > :
> > > Open
> > > Close
> > > ....
> > >
> > > Then, when a user selects one of the list items, I use the selected

row
> to
> > > fill a DataGrid component in order to allow the user to edit all

> language
> > > versions of the resource in a DataGrid.
> > >
> > > Now here comes my problem. If I use a filtered version of this DataSet

> as
> > > the DataSource of my DataGrid (for example a DataViewManager), the

grid
> > will
> > > have exactly the same look than the table I have shown above. That

> doesn't
> > > work for me, cause some resources could be very long error messages,
> > > therefore, I would like to show each column of the table as a row in

the
> > > datagrid, something like this (assuming that I have chosen the item

> > 0000001
> > > Language | Value
> > > en | Close
> > > fr | Fermer
> > > es | Cerrar
> > >
> > > As for now, I have manually done this transformation by creating a

table
> > > called "ResourceItem" in the DataSource bounded to my DataGrid which I

> > fill
> > > by looping on the columns of the selected row. Here's a sample :
> > >
> > > foreach(DataColumn col in drSelectedRow.Tables["Resource"].Columns){
> > > DataRow newGridRow =

> > dsGridDataSet.Tables["ResourceItem"].Rows.NewRow();
> > > newGridRow["Language"] = col.ColumnName;
> > > newGridRow["Value"] = drSelectedRow[col].ToString();
> > > dsGridDataSet.Add(newGridRow);
> > > }
> > >
> > > I don't like this solution 'cause it's finally not a matter of

> > datastructure
> > > but a matter of display. I just would like to be able to show the

> columns
> > of
> > > my original DataSet as rows in my DataGrid. Any idea how can I achieve

> > that
> > > ?
> > >
> > > Thanxs,
> > >
> > > Diego
> > >
> > > P.S. : I'm aware of the cool ways to manage Globalization in .Net and
> > > resource files, but this is not my question. The purpose of my tool is

> to
> > > edit resource files for legacy software programmed in VB6 or in ASP

4.0.
> > So
> > > the edition of resources is to be done with this tool I'm working on

in
> C#
> > > but the edited resource files are intended to be used by other older
> > > software.
> > >
> > >
> > >
> > >
> > >
> > >

> >

>
>


 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
DataGrid Component, Resizing Columns Issue(s) bismarkjoe Microsoft ADO .NET 1 23rd Nov 2004 02:35 PM
Displaying DataGrid Rows fripper Microsoft VB .NET 2 13th Nov 2004 07:41 AM
searching a datagrid's rows and displaying rows where item was found Angel Microsoft C# .NET 0 26th Apr 2004 05:51 PM
displaying data from a dataset in a datagrid Machelle Microsoft ADO .NET 1 8th Sep 2003 05:01 PM
RE: Datagrid Not Displaying Columns Xin Huang Microsoft Dot NET Framework Forms 1 21st Jul 2003 07:44 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 08:59 AM.