19. september 2006 - 15:13Der er
9 kommentarer og 1 løsning
DataGrid 'slukker' ved brug af EditItemIndex
Jeg har et DataGrid, der får værdier ved følgende:
Dim ReaderPartOfSystem As Data.OleDb.OleDbDataReader
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strSQL As String strSQL = "SELECT PartOfSystemText, Sort FROM tblPartOfSystem ORDER BY Sort"
Try ReaderPartOfSystem = DB.Sel(strSQL) dgPartOfSystem.DataSource = ReaderPartOfSystem dgPartOfSystem.DataBind() Catch lblInfo.Text = Err.Description End Try End Sub
DB.Sel (strSQL)returnerer et recordset.
Men når jeg bruger dette, så slukker al indhold i DataGriddet:
Sub grid_EditCommand(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) dgPartOfSystem.EditItemIndex = e.Item.ItemIndex dgPartOfSystem.DataSource = ReaderPartOfSystem dgPartOfSystem.DataBind() End Sub
Du benytter den samme reader til at databinde til i både page_load og i din handler... Men når du når din handler er readeren jo "brugt op". Lav en metode der ved bruge af en reader fylder dit dataset, og kald i page_load hvis der ikke er tale om et postback, og derudover i alle de handlere hvor der sker noget med grid'et. Mvh
Function LookupUpdate(ByVal TableName As String, ByVal Field As String, ByVal dg As DataGrid) As Boolean
Dim strSQL As String Dim Reader As Data.OleDb.OleDbDataReader strSQL = "SELECT " & Field & ", Sort FROM " & TableName & " ORDER BY Sort"
Try Reader = DB.Sel(strSQL) 'Returnerer en reader dg.DataSource = Reader dg.DataBind() Reader.Close() Return True Catch Return False End Try End Function
og starter med:
If Not IsPostBack Then LookupUpdate("tblPartOfSystem", "PartOfSystemText", dgPartOfSystem) End If
og det virker.
Men jeg kan ikke få den til at editere - jeg forsøger mig med:
Sub grid_EditCommand(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) dgPartOfSystem.EditItemIndex = e.Item.ItemIndex dgPartOfSystem.DataSource = UpdateGrid("tblPartOfSystem", "PartOfSystemText") 'Returnerer en reader dgPartOfSystem.DataBind() End Sub
men den åbner blot for Update/Cancel link, men giver ikke adgang til at redigere i feltet? Det er nok ikke måden at gøre det på....?
UpdateGrid er en funktion, der returnerer en datareader og de returnerede data afhænger så af, hvilken tabel men med første parameteren giver den. Jeg bør selvfølgelig bruge samme funktion. Men min tvivl gik på, om det er rigtigt at tage følgenede trin efter hinanden:
1/ Dette går jeg ud fra, giver datagriddet besked om at linien men nu klikker på, skal åbne sig og gå i edit-tilstand dgPartOfSystem.EditItemIndex = e.Item.ItemIndex
2/ Kan man herefter tildele griddet en source? dgPartOfSystem.DataSource = UpdateGrid("tblPartOfSystem", "PartOfSystemText") 'Returnerer en reader
3/ Kan man så lave DataBind() tilsidst og herved åbne en linie, der kan editeres?
Jeg har kraftigt på fornemmelsen, at jeg ikke helt har forstået konceptet i dette?!
Du bør have en konstruktion som denne her: Nu har jeg bare brugt et sorteringsudtryk som parameter til BindGrid-metoden... Men der kan du jo så have andet der er relevant at sætte på.
protected void Page_Load(object sender, EventArgs e) { // håndtering af databinding if (!IsPostBack) { BindGrid(null); } }
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.