Avatar billede tigertool Nybegynder
23. januar 2005 - 17:37 Der er 13 kommentarer og
3 løsninger

data i DataGrid

Jeg har nogle tal jeg gerne vil have præsenteret i et DataGrid (?). Det er ikke nogle tal som jeg får fra en database, eller noget.

Kan et datagrid bruges til dette? I givet fald, hvordan går man - og er der alternativer?

- Jeg benytter C#Builder
Avatar billede arne_v Ekspert
23. januar 2005 - 18:22 #1
Sagtens.

En DataGrid's DataSource kan være et DataSet eller en DataTable,  men kan også være
f.eks. en ArrayList af objekter.
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:23 #2
Cool.

Hvordan gør man? Jeg har en del ens objekter som jeg vil fremvise på liste form i et datagrid.
Avatar billede burningice Nybegynder
23. januar 2005 - 18:29 #3
NavnPåKlassen[] mineObjecter = new NavnPåKlassen[antalAfObjecter];

mineObjecter[0] = new NavnPåKlassen();
mineObjecter[1] = new NavnPåKlassen();
mineObjecter[2] = new NavnPåKlassen();
mineObjecter[3] = new NavnPåKlassen();

ditDataGrid.DataSource = mineObjecter;

Det er en mulighed. En anden er bare at bruge et ArrayList:

ArrayList list = new ArrayList();

list.Add(new NavnPåKlassen());
list.Add(new NavnPåKlassen());
list.Add(new NavnPåKlassen());
list.Add(new NavnPåKlassen());

ditDataGrid.DataSource = list;

I bund og gund skal DataSourcen bare være af typen IList, og det er både Array og ArrayList, ligesom DataTable IDataReader og mange andre.
Avatar billede pixy Nybegynder
23. januar 2005 - 18:31 #4
Du kan smide et datagrid (datagrid1) på en form.
Og fx. lave en knap som gør følgende:

DataTable dt = new DataTable();

#region laver kolonner           
DataColumn col1 = new DataColumn();
col1.DataType = System.Type.GetType("System.Object");
col.ColumnName = "kolonne1";
col1.ReadOnly = true;
col1.Unique = true;

DataColumn col2 = new DataColumn();
col2.DataType = System.Type.GetType("System.Object");
col2.ColumnName = "kolonne2";
col2.ReadOnly = false;
col2.Unique = false;
#endregion

#region Binder kolonner til datagrid
dt.Columns.Add(col1);
dt.Columns.Add(col2);
#endregion

// binder datasource til datagrid
DataGrid1.DataSource=dt;


#region indsætter data i datagrid
DataRow roww = dt.NewRow();
           
roww["kolonne1"]="Dette er data i kolonne1";
roww["kolonne2"]="Og her er lige lidt mere data";

dt.Rows.Add(roww);
#endregion


Sådan gør man det. Hvis du har en masse objekter du vil fylde i dit grid, vil det være en klar fordel at lave en override på ToStrng() metoden, således du putter hele objekter ind i dit datatable, så du kan hive hele objekter ud igen.
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:31 #5
Jeg har lige prøvet følgende:

ArrayList source = new ArrayList();
source.Add("test");
source.Add("test 3");
source.Add("test 5");
source.Add("test fad");

dataGrid1.DataSource = source;


Problemet er bare at det der bliver vist i listen er Length, altså længten at stringen.
Avatar billede pixy Nybegynder
23. januar 2005 - 18:33 #6
hmmm... der skal lige tages højde for et par enkelte tastefejl i ovenstående... Det er ikke såen når man ikke har sin Intellisense
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:35 #7
Takker. Det virker jo rigtig fint.

Kan i lige alle 3 smide et svar?
Avatar billede pixy Nybegynder
23. januar 2005 - 18:35 #8
Svar :)
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:39 #9
Kan man forresten fjerne den mulighed hvor der er en *, altså hvor man kan tilføje flere rows?
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:40 #10
Ahhh... bare sætte ReadOnly på DataGrid objektet :P
Avatar billede burningice Nybegynder
23. januar 2005 - 18:42 #11
man skal huske at definere hver kulonne i sit datagrid til propertien på sit object, så skulle det virke. Jeg bruger selv Collections for det meste som datasource.
Avatar billede tigertool Nybegynder
23. januar 2005 - 18:46 #12
pixy -> Hvad med breden på kolonnen, kan man sætte den?
Avatar billede pixy Nybegynder
23. januar 2005 - 18:51 #13
Jeg har også selv problemer med at sætte bredde på kolonner runtime. Det eneste jeg kan finde er en property på dit datagrid der hedder PreferredColumnWidth som sætter en default bredde på alle kolonner.
Avatar billede arne_v Ekspert
23. januar 2005 - 22:53 #14
svar
Avatar billede pixy Nybegynder
23. januar 2005 - 23:05 #15
Ang. bredde på columns, skal det sættes via. tableStyles. De skriver lidt om det her:
http://support.microsoft.com/default.aspx?scid=kb;en-us;812422
Avatar billede tigertool Nybegynder
25. januar 2005 - 00:12 #16
pixy << jeg prøvede faktisk selv med TableStyles, men jeg kunne ikke rigtigt få det til at virke korrekt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester