Avatar billede Kim Neesgaard Seniormester
04. oktober 2005 - 20:01 Der 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?
Avatar billede jokkejensen Novice
04. oktober 2005 - 20:19 #1
http://www.google.dk/search?hl=da&q=datagrid+%2Bedittemplate&meta=

Ja, man bruger ikke så meget querystrengen til "navigation" på en webform længere..

Datagridded har en række templates man kan bruge med forskellig funktion..
Avatar billede Kim Neesgaard Seniormester
04. oktober 2005 - 20:54 #2
Hm - lidt svært at overskue! Du har ikke et simpelt eksempel?
Avatar billede jokkejensen Novice
04. oktober 2005 - 21:44 #3
Avatar billede snepnet Nybegynder
06. oktober 2005 - 23:14 #4
hvis du har mulighed for at benytte version 2.0, er scenariet understøttet kodefrit.... har du mulighed for det?
mvh
Avatar billede Kim Neesgaard Seniormester
06. oktober 2005 - 23:21 #5
Ikke endnu - desværre.
Avatar billede snepnet Nybegynder
07. oktober 2005 - 21:23 #6
den model datagrid'et lægger op til har du her:
http://www.eksperten.dk/spm/652206
Avatar billede snepnet Nybegynder
07. oktober 2005 - 21:24 #7
men men men neesgaard.... 2.0 ligger i release om en måned - kan du ikke få den kringlet ;o)
mvh
Avatar billede Kim Neesgaard Seniormester
08. oktober 2005 - 11:07 #8
Det vil jeg da prøve! Har du et link til det sted hvor der skrives, at den releases om en måned?
Avatar billede Kim Neesgaard Seniormester
08. oktober 2005 - 14:10 #9
Jeg har prøvet det, du anbefaler i 652206, dvs. jeg har indføjet:

ButtonColumn Text="&gt;" CommandName="Select"

i HTML-delen af datagriddet, men når jeg kører den, sker der ikke noget - skal man gøre mere end dette?
Avatar billede snepnet Nybegynder
08. oktober 2005 - 15:12 #10
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.

mvh
Avatar billede Kim Neesgaard Seniormester
08. oktober 2005 - 18:08 #11
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.
Avatar billede snepnet Nybegynder
09. oktober 2005 - 00:42 #12
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
Avatar billede Kim Neesgaard Seniormester
10. oktober 2005 - 21:11 #13
Jeg havde bare ikke fået det hele med - nu kommer de fint med. Jeg roder lidt mere med det!
Avatar billede snepnet Nybegynder
11. oktober 2005 - 10:52 #14
super :o)
Avatar billede Kim Neesgaard Seniormester
11. oktober 2005 - 20:41 #15
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?
Avatar billede snepnet Nybegynder
12. oktober 2005 - 11:31 #16
hvis du eksempelvis har et id stående i første celle, kan du få fat i det sådan her:

string id = e.Item.Cells[0].Text;

er det noget der står i en textbox du gerne vil have fat i - kan du gøre det med :

TextBox tb = e.Item.Cells[0].Controls[0] as TextBox;
string id = tb.Text;

hvis det er en kontrol du selv har angivet i en template kan du finde den på vanlig vis med:

TextBox tb = e.Item.FindControl("<kontrolid fra template>") as TextBox;

Desuden har du mulighed for at angive DataKey på dit grid, og bruge det istedet - hvilket du kan se noget om i denne artikel:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkwalkthroughusingdatagridwebcontroltoreadwritedata.asp

mvh
Avatar billede Kim Neesgaard Seniormester
12. oktober 2005 - 19:33 #17
Når jeg oversætter den første til VB får jeg:

Dim id As String = e.Item.Cells(0).Text

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
Avatar billede snepnet Nybegynder
13. oktober 2005 - 12:34 #18
hej igen :o)

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

mvh
Avatar billede snepnet Nybegynder
13. oktober 2005 - 12:35 #19
(nullerne skal så skiftes ud med indexes, hvor du rent faktisk kan finde en tekstboks - ellers vil du få en fejl)
mvh
Avatar billede Kim Neesgaard Seniormester
13. oktober 2005 - 22:20 #20
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.
Avatar billede snepnet Nybegynder
01. november 2005 - 21:05 #21
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)
Avatar billede Kim Neesgaard Seniormester
01. november 2005 - 21:51 #22
Nemlig!!
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