Avatar billede anhansen Nybegynder
20. januar 2004 - 14:13 Der 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.. :-)
Avatar billede thor.ostergaard Nybegynder
20. januar 2004 - 14:46 #1
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.
Avatar billede anhansen Nybegynder
20. januar 2004 - 15:29 #2
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..
Avatar billede thor.ostergaard Nybegynder
20. januar 2004 - 15:35 #3
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.
Avatar billede anhansen Nybegynder
20. januar 2004 - 15:42 #4
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.. :-)
Avatar billede anhansen Nybegynder
20. januar 2004 - 15:46 #5
Jeg forstår det ikke...

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.

Hvor er resten henne?
Avatar billede thor.ostergaard Nybegynder
20. januar 2004 - 15:58 #6
Har du prøvet dgResult.Columns[0].Visible = false; ?
Avatar billede anhansen Nybegynder
20. januar 2004 - 16:02 #7
Ja... det virker fint.. Men det er kolonne 3 ([2]) som skal være usynlig.
De to første er mine templatekolonner, de skal være der..
Avatar billede anhansen Nybegynder
20. januar 2004 - 16:03 #8
Jeg skal til træning nu... Følger lige op på det i morgen.. :-)
Avatar billede anhansen Nybegynder
21. januar 2004 - 10:38 #9
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...
Avatar billede anhansen Nybegynder
21. januar 2004 - 10:46 #10
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å.

Sidespring: Hvad er CType...

Smid et svar så får du point som tak for hjælpen.
Avatar billede anhansen Nybegynder
21. januar 2004 - 10:47 #11
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. :-)
Avatar billede anhansen Nybegynder
21. januar 2004 - 10:48 #12
og dgResult selvfølgelig er mit datagrid.
Avatar billede danielfrost Nybegynder
27. januar 2004 - 15:05 #13
Hej med jer!

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 :-)

/Daniel
Avatar billede anhansen Nybegynder
27. januar 2004 - 15:45 #14
Lukker... tak for hjælpen alle sammen...
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