Problemer med at editere DataTable med GridView
Jeg har brug for at tilbyde en tabel med vilkårligt antal records i til editering. Der kan altså tænkes at være 0 records ti at starte med. Planen er at bruge en GridView, og for at gøre livet simpelt for mig selv, havde jeg tænkt mig at bruge en DataTable, som der i hht. brugerens response tilføjes rækker til. Tanken er så først når brugeren er færdig, at gemme tabellen i DB.Jeg er nybegynder og har famlet mig frem til at man sådan set selv skal lave alle de nødvendige handlinger (er det rigtigt? At jeg selv skal sætte EditIndex, samt udskifte værdier i den DataTable - kan gridview ikke dét når tabellen ikke er linket med en dataadaptor?)
Jeg har fået det til at virke - men har svært ved at forstå hvorfor jeg skal trykke på EDIT knappen TO gange inden den editerede række switcher til edit.
Koden er her (jeg bruger template columns frodi der skal en DropDownList ind når jeg har fået dette her til at virke):
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim tbl As DataTable
Dim col1, col2, col3 As DataColumn
Dim workRow As DataRow
utilsuser.dwrite("from load" & vbCrLf)
tbl = New DataTable("mytable")
If Not Page.IsPostBack Then
col1 = New DataColumn("mycolname1", Type.GetType("System.Int32"))
col2 = New DataColumn("mycolname2", Type.GetType("System.String"))
col3 = New DataColumn("mycolname3", Type.GetType("System.Boolean"))
tbl.Columns.Add(col1)
tbl.Columns.Add(col2)
tbl.Constraints.Add(New UniqueConstraint(col2))
tbl.Columns.Add(col3)
Dim i As Integer
For i = 0 To 9
workRow = tbl.NewRow()
workRow(0) = i
workRow(1) = "CustName" & i.ToString()
workRow(2) = True
tbl.Rows.Add(workRow)
Next
tbl.AcceptChanges()
GridView2.DataSource = tbl
GridView2.DataBind()
Session("mytabl") = tbl
Session("mytest") = "min test sætning"
End If
End Sub
Protected Sub GridView2_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView2.RowDeleting
Dim tbl As New DataTable
tbl = Session("mytabl")
Dim itemcolumns As DataRowCollection = tbl.Rows
itemcolumns(e.RowIndex).Delete()
tbl.AcceptChanges()
GridView2.DataSource = tbl
GridView2.DataBind()
Session("mytabl") = tbl
End Sub
Protected Sub GridView2_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView2.RowEditing
Dim tbl As New DataTable
GridView2.EditIndex = e.NewEditIndex
End Sub
Protected Sub GridView2_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView2.RowUpdating
Dim tbl As New DataTable
tbl = Session("mytabl")
Dim itemcolumns As DataRowCollection = tbl.Rows
Dim tablerow As DataRow
tablerow = itemcolumns(e.RowIndex)
MsgBox(CType(GridView2.Rows(e.RowIndex).Cells(2).FindControl("TextBox2"), TextBox).Text() & "tablerow")
tablerow.BeginEdit()
tablerow(1) = CType(GridView2.Rows(e.RowIndex).Cells(2).FindControl("TextBox2"), TextBox).Text()
tablerow.EndEdit()
tbl.AcceptChanges()
GridView2.EditIndex = -1
GridView2.DataSource = tbl
GridView2.DataBind()
Session("mytabl") = tbl
End Sub
Alle ideer/kommentarer er velkomne.
