私の投稿をご覧いただきありがとうございます。私は現在、ビューステートのデータテーブルによって設定されたグリッドビューを持っています。私の悩みは、行を編集できないことです。以下にコードを示しますが、[編集] をクリックすると、セル 2 のテキスト ボックスは空になりますが、セル 1 のテキストは空になりません。これまでにデータテーブルの作成から始めたコードは次のとおりです。
GridView マークアップ:
<asp:GridView ID="GridView2" runat="server" Visible="False"
AutoGenerateColumns="false" ShowFooter="True"
AutoGenerateDeleteButton="True" AutoGenerateEditButton="True">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
<asp:TemplateField HeaderText="Action Item">
<ItemTemplate>
<asp:TextBox ID="TextBox1" Width="500px" TextMode="MultiLine" runat="server"></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="ButtonAdd" OnClick="ButtonAdd_Click" runat="server" Text="Add New Row" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
'set initial dt :
Private Sub SetInitialRow()
Dim dt As New DataTable()
Dim dr As DataRow = Nothing
dt.Columns.Add(New DataColumn("RowNumber", GetType(String)))
dt.Columns.Add(New DataColumn("Action Item", GetType(String)))
dr = dt.NewRow()
dr("RowNumber") = 1
dr("Action Item") = String.Empty
dt.Rows.Add(dr)
'dr = dt.NewRow();
'Store the DataTable in ViewState
ViewState("CurrentTable") = dt
GridView2.DataSource = dt
GridView2.DataBind()
'次に、グリッドビュー フッターにボタン クリックで行を追加します。
Private Sub AddNewRowToGrid()
Dim rowIndex As Integer = 0
If ViewState("CurrentTable") IsNot Nothing Then
Dim dtCurrentTable As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
Dim drCurrentRow As DataRow = Nothing
If dtCurrentTable.Rows.Count > 0 Then
For i As Integer = 1 To dtCurrentTable.Rows.Count
'extract the TextBox values
Dim box1 As TextBox = DirectCast(GridView2.Rows(rowIndex).Cells(1).FindControl("TextBox1"), TextBox)
drCurrentRow = dtCurrentTable.NewRow()
drCurrentRow("RowNumber") = i + 1
drCurrentRow("Action Item") = box1.Text
rowIndex += 1
Next
'add new row to DataTable
dtCurrentTable.Rows.Add(drCurrentRow)
'Store the current data to ViewState
ViewState("CurrentTable") = dtCurrentTable
'Rebind the Grid with the current data
GridView2.DataSource = dtCurrentTable
GridView2.DataBind()
End If
Else
Response.Write("ViewState is null")
End If
'Set Previous Data on Postbacks
SetPreviousData()
End Sub
今、ここが私が困っているところです。このコードは行番号 (最初の列) を更新しますが、2 番目の列には何もしません。実際にコンテンツを削除します。
Protected Sub GridView2_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView2.RowEditing
'Set the edit index.
Dim dt As DataTable = CType(ViewState("CurrentTable"), DataTable)
GridView2.EditIndex = e.NewEditIndex
GridView2.DataSource = ViewState("CurrentTable")
GridView2.DataBind()
End Sub
Protected Sub GridView2_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView2.RowUpdating
'Retrieve the table from the session object.
Dim dt As DataTable = CType(ViewState("CurrentTable"), DataTable)
'Update the values.
Dim row = GridView2.Rows(e.RowIndex)
dt.Rows(row.DataItemIndex)("RowNumber") = (CType((row.Cells(1).Controls(0)), TextBox)).Text
dt.Rows(row.DataItemIndex)("Action Item") = (CType((row.Cells(2).FindControl("TextBox1")), TextBox).Text)
'Reset the edit index.
GridView2.EditIndex = -1
'Bind data to the GridView control.
GridView2.DataSource = ViewState("CurrentTable")
GridView2.DataBind()
End Sub
どこが間違っているのか教えてください。ありがとうございました!
ジョシュ