20. januar 2004 - 14:13Der er
13 kommentarer og 1 løsning
Adgang til datagrid kolonner
Hej.
Jeg har en datagrid på min side, med to kolonner plus et forskelligt antal "autogenerede" kolonner.
Hvordan kan jeg komme i kontakt med de autogenerede kolonner. Jeg har et par problemer 1. Hvis jeg kører datagrid1.Columns.Count så giver den 2, uanset om jeg kører den ved itemcreated, itemdatabound, eller i pageload ved postback. Dvs den tæller ikke de autogenerede med, hvordan kan jeg få den til det. 2. Hvis 1 bliver løst er det nemt nok, så kan jeg be om at sætte datagrid1.Columns[2].Visible = false; da det altid er den første autogenerede jeg ikke vil vise. 3. Hvis ikke man kan 1., er der så andre måder at gøre det på?
håber der er nogle der har haft problemet før. Jeg skal bruge værdien af det i første autogenerede kolonne, der er bare ingen grund til at brugeren kan se det.. :-)
Jeg plejer at hive info ud af datagrids ved CType(objArgs.Item.Cells(0).Controls(0),Textbox).Text (godt nok VB, men det skulle være til at oversætte til c#, ellers må du vende tilbage) - det er ikke den mest elegante måde at gøre det på, men det virker. Jeg har implementeret en løsning, hvor jeg har brugt datagrid1.Columns[0].Visible = false - og det med autogenererede kolonner.
Jeg forstår ikke helt... Den løsning du har implementeret med Visible = false, hvor har du skrevet det henne i koden... Altså hvor i angiver du at den angivne kolonne ikke skal være visible.. Det er det jeg ikke kan få den til... Hvis jeg trykker "vis kilde" i explorer, så kan jeg heller ikke se koden til datagrid'et, kan det have noget med det at gøre.. Det står fint på siden..
Det gør jeg lige efter jeg har lavet databind til datagriddet. Du skal ikke kunne se koden til datagrid'et - det er jo princippet bag asp.net at serveren sørger for at generere en html kode, der passer til den browser brugeren kommer med.
Jeg kan bare se koden til det på nogle af mine andre sider... Altså ikke til "datagrid", men den tabel der bliver lavet ud fra det... :-) Efter databind siger du.. Det prøver jeg lige.. :-)
Jeg har mit datagrid. To faste kolonner (i datagrid.Columns[] er de 0 og 1 index) og en del autogenerede.
Nu ser min kode sådan ud: dgResult.DataSource = ds.Tables[0]; dgResult.DataBind(); if(dgResult.Columns.Count > 2) dgResult.Columns[2].Visible = false; else Response.Write(dgResult.Columns.Count + "hej");
Den ryger i else'n hver gang. Hvorfor? Der er på skærmen, 5 kolonner ud over de to faste.. Alligevel ligger der kun 2 i columns.
Kan du ikke lige prøve at skrive dit eksempel thor... Jeg kan virkelig ikke komme i kontakt med de autogenerede kolonner. Nu er jeg igang via datagrid.controls.controls.controls osv.. ;-) Lidt et regnestykke...
Det fik jeg til at virke... Ved at bare sige 2xcontrols, første datatable, datatableitem, så tablecell, og på den cell, sætter jeg den så til visible=false;
Det giver i hvertfald det ønskede resultat.. Kan ikke helt gennemskue om det var det du mente i dit første indlæg også.
Til fremtidig reference, så kommer koden her: foreach(Control cr in dgResult.Controls) { foreach(Control cr1 in cr.Controls) { ((TableCell)cr1.Controls[2]).Visible = false; } } Hvor cr1.Controls[X] er den kolonne som skal skjules. :-)
Hvis man vil tilgå sine kolonner i sin datagrid kan man bruge eventen OnItemDataBound. I den event kan man så tilgå hver enkelt kolonne og manipulere den som man lyster :-)
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.