htmlページは次のようになります。
<asp:GridView ID="Grid1" runat="server" AutoGenerateColumns="False" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%#Bind("ID") %>' CssClass="rowHeader"></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txt1" runat="server" Text='<%#Bind("ID") %>'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:TextBox ID="txt" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txt2" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:Label ID="Comments" runat="server" Text='<%#Bind("Comments") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="Drop1" runat="server">
<asp:ListItem>v1</asp:ListItem>
<asp:ListItem>v2</asp:ListItem>
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnAdd" runat="server" Text="Add" />
<asp:Button ID="btnSave" runat="server" Text="Save" />
ページの読み込み時、
conn = New OleDb.OleDbConnection("プロバイダー = Microsoft.Jet.OLEDB.4.0; データ ソース = D:\GDD_Work\Employee.mdb")
If Not Page.IsPostBack Then
ViewState("intCount") = 0
Session("blnFlag") = False
Dim Cmd As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
Cmd.Fill(ds, "Employee")
Grid1.DataSource = ds.Tables("Employee")
Grid1.DataBind()
Session("intOldCount") = ds.Tables("Employee").Rows.Count
Session("tempTable") = ds.Tables("Employee")
追加ボタンをクリックすると、
If Session("blnFlag") = False Then Session("blnFlag") = True Else getFooter() End If
Grid1.FooterRow.Visible = True
保存ボタンをクリックすると、
Dim intOldCount As Integer Dim intNewCount As Integer Dim dt As New DataTable Dim strQuery As String intOldCount = CType(Session("intOldCount"), Integer) If Session("blnFlag") = True Then
getFooter()
dt = CType(Session("tempTable"), DataTable)
intNewCount = dt.Rows.Count
If intOldCount = intNewCount Then
Dim tx1 As TextBox
Dim tx2 As TextBox
Dim drp As DropDownList
tx1 = CType(Grid1.FooterRow.FindControl("txt1"), TextBox)
tx2 = CType(Grid1.FooterRow.FindControl("txt2"), TextBox)
drp = CType(Grid1.FooterRow.FindControl("Drop1"), DropDownList)
strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + tx1.Text + "','" + tx2.Text + "','" + drp.SelectedValue + "')"
Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd.ExecuteNonQuery()
conn.Close()
Else
For i = intOldCount To intNewCount - 1
Dim strId As String
Dim strDesc As String
Dim strComm As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strComm = dt.Rows(i)(2).ToString()
strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + strId + "','" + strDesc + "','" + strComm + "')"
Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd.ExecuteNonQuery()
conn.Close()
Next
End If
For i = 0 To intOldCount - 1
Dim strId As String
Dim strDesc As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"
Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd1.ExecuteNonQuery()
conn.Close()
Next
ds = New DataSet()
Dim CmdData As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
CmdData.Fill(ds, "Employee")
Grid1.DataSource = ds.Tables("Employee").DefaultView
Grid1.DataBind()
Session("blnFlag") = False
Else
dt = CType(Session("tempTable"), DataTable)
i = 0
For Each rows As GridViewRow In Grid1.Rows
Dim txt As TextBox
txt = CType(rows.FindControl("txt"), TextBox)
dt.Rows(i)(1) = txt.Text
i = i + 1
Next
Session("tempTable") = dt
For i = 0 To intOldCount - 1
Dim strId As String
Dim strDesc As String
strId = dt.Rows(i)(0).ToString()
strDesc = dt.Rows(i)(1).ToString()
strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"
Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
conn.Open()
Cmd1.ExecuteNonQuery()
conn.Close()
Next
Grid1.DataSource = dt.DefaultView
Grid1.DataBind()
End If
私は次のような1つの関数を使用しています
Public Function getFooter() Dim tx1 As TextBox Dim tx2 As TextBox Dim drp As DropDownList tx1 = CType(Grid1.FooterRow.FindControl("txt1"), TextBox) tx2 = CType(Grid1.FooterRow.FindControl("txt2"), TextBox ) drp = CType(Grid1.FooterRow.FindControl("Drop1"), DropDownList)
Dim dr As DataRow
Dim dt As DataTable
dt = CType(Session("tempTable"), DataTable)
dr = dt.NewRow()
dr("ID") = tx1.Text
dr("Description") = tx2.Text
dr("Comments") = drp.SelectedValue
dt.Rows.Add(dr)
i = 0
For Each rows As GridViewRow In Grid1.Rows
Dim txt As TextBox
txt = CType(rows.FindControl("txt"), TextBox)
dt.Rows(i)(1) = txt.Text
i = i + 1
Next
Grid1.DataSource = dt.DefaultView
Grid1.DataBind()
Session("tempTable") = dt
End Function