04. oktober 2005 - 20:01Der er
21 kommentarer og 1 løsning
Rette data i et datagrid
Jeg har et datagrid med data fra en Accesstabel og det er fint nok til at vise data. Jeg vil dog gerne kunne aflæse, hvilken linie en bruger peger på og så dirigere til en ny user control, hvor man kan rette data.
Hvis jeg i tabellen indbygger en kolonne med fx. <a href="Default.aspx?Side=NytOrd">Ret ord</a> kan jeg få vist et link i datagriddet, som brugeren kan klikke på, men er det den 'autoriserede' måde at gøre det på i et datagrid?
ja du skal selv skrive koden der får det til at ske. du styrer det på SelectedItemEndex og EditItemIndex... f.eks.
protected void grid_EditCommand(object source, DataGridCommandEventArgs e) { this.someDataGrid.EditItemIndex = e.Item.ItemIndex; // og efterfølgende databinding this.someDataGrid.DataBind(); }
sætter du edititemindex til -1, vil ingen rækker være editerbare.
mht. det med selected - så er det jo ikke noget der gør noget i sig selv, men du kan angive en SelectedItemTemplate, og på den måde få den valgte række til at se anderledes ud end de andre.
Jeg har indført funktionen tilrettet mit datagrid i koden og indsat OnEditCommand="Grid_EditCommand" i datagriddets HTML. I designmode kan jeg nu se på datagriddet, at den har taget den farven fra SelectedStyleItem, men hvordan 'fortæller' jeg datagriddet, når jeg kører programmet, at jeg gerne vil editere en linie? Jeg har prøvet at klikke på linien, men der sker ikke noget.
hvis du sætter knapperne ind i griddet som det er gjort i det spørgsmål jeg henviste til, skulle du få en edit-knap i dit grid. klik på den skulle medføre at eventhandleren bliver kørt, hvilket pr. default medfører at de felter der vises i dit grid bliver til tekstbokse (på den linie du har klikket edit på). mvh
Når man trykker Edit, vil jeg gerne gå til en redigeringsside. Så vidt jeg kan se, så angiver e.Item.ItemIndex positionen i datagriddet startende med 0 - hvordan får man information om værdien af et af felterne, fx. autonummer, så man ved, hvilken record, man skal vise på redigeringssiden?
men der kommer ikke noget i id. Er det fordi min Select står i første celle? Hvordan får man fat på oplysningerne tilhøjre i griddet?
Når du skriver noget, 'der står i en textbox' - er det så en celle i datagriddet, du mener? Jeg kan ikke oversætte dene til VB:
Dim tb As TextBox = e.Item.Cells(0).Controls(0) ' 'ToDo: Error processing original source shown below 'System.Char[] '-----------------------------------------^--- Syntax error: ';' expected Dim id As String = tb.Text
cellerne i rækken er 0-indexeret, så med Dim id As String = e.Item.Cells(0).Text får du fat i den første celle.
vil du have fat i den næste kan du skrive Dim id As String = e.Item.Cells(1).Text
og så fremdeles.
og det med tekstboksen - så ja. det jeg mente var, at hvis du i din template f.eks. har angivet, at felt 3 skal vises i en tekstboks, så vil teksten stå inde i tekstboksen, og du bliver derfor nødt til at have fat i den for at få fat i teksten.
jeg ved ikke hvorfor oversætteren ikke kan oversætte linien - jeg vil tro det er noget i denne stil på vb'sk
Dim tb As TextBox = CType(e.Item.Cells(0).Controls(0), TextBox);
Ha - nu virker det! Er det den 'autoriserede' måde at aflæse brugerens valg på? Jeg mener man gør jo en opdatering af den underliggende tabel afhængig af datavisningen i griddet, dvs. hvis man ændrer rækkefølge i griddet skal man huske at ændre aflæsningspositionen.
ja - datagrid'et i v1.1 har lidt mangler hvad den slags angår (2.0 byder på lidt mere ;o) undskyld jeg ikke har været her - har haft ballade med internetydbyderen. mvh (et svar hvis alt skulle være vel her)
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.