Har du kört databind på datagriden före? Och vad använder du för objekt för att fylla din datagrid? Du kan också om du redan har ett dataset, återanvända det eller kopiera det till ett nytt dataset, men det känns som om du inte skall behöva det. Jo gör databind före. Fyller datagridden med ett dataset. Provade även myDataSet = CType(dtgObjekt.DataSource, DataSet) utan resultat. Eftersom du redan har ett dataset liggandes där borde det gå väldigt enkelt. Du borde även då ha en dataadapter tidigare som du fyller ditt dataset med Men problemet är ju att Datagrid.Datasource är Nothing. Alltså blir datasetet också nothing. Det borde ju gå att få fram alla värden i en datagrid eller? Men om ditt första dataset är nothing så kan ju rimligen inte heller din datagrid innehålla någon information. Då är det connection eller adapter som inte är korrekt i början av din kod. Ok. Antingen är jag tom i bollen eller så förstår du inte vad jag menar Pelle. Tänk dig en sida med en datagrid som visar X antal objekt och ser ut så här: Nädå, här skrattas det inte. Ibland är det svårt att förklara och förstå varandra. Har löst det nu. Problemet var att jag i mina bindningssubbar använde olika dataset, och jag var tvungen att veta vilket ds om använts när editteringen görs. Lade därför ds:en i en Cache (som töms varje gång innan ett ds läggs in) som då kunde användas:Sv: Datagrid
Sv:Datagrid
Kanske skall förklara lite tydligar evad jag vill åstadkomma... Har en datagrid som fylls med data från ett ds (som i sin tur har data från en db). Har även en EditCommandColumn där användaren skall kunna ändra datat i d-gridden. Problemet är att gridden kan bindas via olika dataset p.g.a selekteringar och sökfunktioner (När sidan laddas första gången körs BindAll, då all data från en tabell i databasen visas. Sen kan användaren välja från en dropdownlist för att bara visa vissa fällt eller göra en sökning som också visar endast vissa fält). Om man nu har valt att göra en selektering, och klickat på ändra, fått fram textboxarna (med dtgObjekt.EditItemIndex = e.Item.ItemIndex) så blir det fel vid databindningen (dtgObjekt.DataBind()). Inget visas. Om jag deremot kör bindAll() så går det, men då hamnar de editerbara fälten på fel position.
Vad jag därför vill är att kunna sätta datagridens värden till ett (nytt) dataset, visa de editerbara fälten (med dtgObjekt.EditItemIndex = e.Item.ItemIndex) och sen göra
<code>
dtgObjekt.DataSource = myDataset 'det nya datasetet
dtgObjekt.DataBind()
</code>
Hoppas du förstår vad jag menar.. Är lite svårt att förklara.Sv: Datagrid
Dim ds As New DataSet
DataAdapter1.Fill(ds, "nyttdataset")Sv:Datagrid
Sv: Datagrid
Sv:Datagrid
Typ Namn Snr IP adress etc etc Ändra Tabort
---------------------------------------------------------------
dasdas das ds asd dasd asd dsdsd [imgbut] [imgbut]
Och under datagriden finns en dropdown:
Selektering: |_____________| Ok
Dropdownen innehåller typer och om användaren väljer något av denna så visas enbart den typen i datagridden (annars visas alla)
Dessutom finns en sökruta där man tex kan söka på namn eller IP.
Första gången sidan laddas körs subben (ropas från form load) "bindAll" som hämtar "all" data från en db, sätter den till ett dataset som sedan datagridden binds till. Om användaren väljer något i selekterings ddl en så körs subben bindByType som hämtar enbart datan av den valda typen, sätter till ett dataset som sedan datagridden binds till. Samma sak om användaren söker (då körs bindBySearch).
Nu till mitt problem (som troligen inte är ett propblem om jag bara fattade vad du menar, men är man trög så är man)...
Om användaren klickar på ändra knappen i datagridden, vilket gör att följande sub körs:
<code>
Sub Ändra(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
dtgObjekt.EditItemIndex = e.Item.ItemIndex
dtgObjekt.DataBind()
End Sub
</code>
Så försvinner allt från gridden. Inga editerbara fält visas. Ja allt försvinner.
Alltså borde jag köra någon av bindAll, bindByType, eller bindBySearch för att det skall visas (och det funkar) men jag måste då veta vilken som är aktuell för att de editerbara fälten skall hamna på rätt position (rad).
Kanske gav detta dig lite förståelse över vad jag menar (om inte annat ett gott skratt). Sv: Datagrid
Jag tror inte du kommer undan med bara databind här, du måste köra en fill först också för att få med ändringarna så datat presenteras rätt.
dtgObjekt.EditItemIndex = e.Item.ItemIndex
adapter.fill(ds) <-- vad det nu du har för objekt deklarerade här..
dtgObjekt.DataBind()Sv:Datagrid
<code>
Sub Ändra(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
dtgObjekt.EditItemIndex = e.Item.ItemIndex
dtgObjekt.DataSource = Cache("ds")
dtgObjekt.DataBind()
End Sub
</code>
Så nu funkar det.
Tack Pelle för dina svar.