gridview のテキスト ボックスとドロップダウン リスト ボックス コントロールで vb.net.crating 動的行を使用していますが、新しい行の追加ボタンをクリックすると作成できず、その行の値もバックエンドに保存されません。ここで、参照用に mycode を添付しました。
designing code
-------------
<asp:gridview ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false" Width ="100%">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
<asp:TemplateField HeaderText="Origin country">
<ItemTemplate>
<asp:DropDownList ID="ddl1" runat ="server">
<asp:ListItem ></asp:ListItem>
<asp:ListItem >India</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Origin City">
<ItemTemplate>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Destination Country">
<ItemTemplate>
<asp:DropDownList ID="ddl2" runat ="server" >
<asp:ListItem ></asp:ListItem>
<asp:ListItem >India</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Destination City">
<ItemTemplate>
<asp:TextBox ID="TextBox21" runat="server"></asp:TextBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<%--<asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick = "ButtonAdd_click"/>--%>
<asp:LinkButton ID="lnk1" runat ="server" Text ="Add new Row" ></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
code
-----
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
SetInitialRow()
End If
End Sub
Private Sub SetInitialRow()
Dim dt As DataTable = New DataTable
Dim dr As DataRow = Nothing
dt.Columns.Add(New DataColumn("RowNumber", GetType(System.String)))
dt.Columns.Add(New DataColumn("Column1", GetType(System.String)))
dt.Columns.Add(New DataColumn("Column2", GetType(System.String)))
dt.Columns.Add(New DataColumn("Column3", GetType(System.String)))
dt.Columns.Add(New DataColumn("column4", GetType(System.String)))
dr = dt.NewRow
dr("RowNumber") = 1
dr("Column1") = String.Empty
dr("Column2") = String.Empty
dr("Column3") = String.Empty
dr("column4") = String.Empty
dt.Rows.Add(dr)
'dr = dt.NewRow();
'Store the DataTable in ViewState
ViewState("CurrentTable") = dt
Gridview1.DataSource = dt
Gridview1.DataBind()
End Sub
Protected Sub lnk1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim rowIndex As Integer = 0
Dim sc As StringCollection = New StringCollection
If (Not (ViewState("CurrentTable")) Is Nothing) Then
Dim dtCurrentTable As DataTable = CType(ViewState("CurrentTable"), DataTable)
If (dtCurrentTable.Rows.Count > 0) Then
Dim i As Integer = 1
Do While (i <= dtCurrentTable.Rows.Count)
'extract the TextBox values
Dim box1 As DropDownList = CType(Gridview1.Rows(rowIndex).Cells(1).FindControl("ddl1"), DropDownList)
Dim box2 As TextBox = CType(Gridview1.Rows(rowIndex).Cells(2).FindControl("TextBox2"), TextBox)
Dim box3 As DropDownList = CType(Gridview1.Rows(rowIndex).Cells(3).FindControl("ddl2"), DropDownList)
Dim box4 As TextBox = CType(Gridview1.Rows(rowIndex).Cells(4).FindControl("TextBox21"), TextBox)
'get the values from the TextBoxes
'then add it to the collections with a comma "," as the delimited values
'sc.Add((box1.Text + ("," + (box2.Text + ("," + box3.Text)))))
sc.Add((box1.Text + ("," + (box2.Text + ("," + box3.Text + ("," + box4.Text))))))
rowIndex = (rowIndex + 1)
i = (i + 1)
Loop
'Call the method for executing inserts
InsertRecords(sc)
End If
End If
End Sub
Private Sub InsertRecords(ByVal sc As StringCollection)
Dim str As String = "server=local host; database=traveldesk; username=root; password=test123;"
Dim conn As MySqlConnection = New MySqlConnection(Str)
Dim sb As StringBuilder = New StringBuilder(String.Empty)
Dim splitItems() As String = Nothing
For Each item As String In sc
Const sqlStatement As String = "INSERT INTO tbl_testing (Col1,Col2,Col3,Col4) VALUES"
If item.Contains(",") Then
splitItems = item.Split(",".ToCharArray)
sb.AppendFormat("{0}('{1}','{2}','{3}'); ", sqlStatement, splitItems(0), splitItems(1), splitItems(2))
End If
Next
Try
conn.Open()
Dim cmd As MySqlCommand = New MySqlCommand(sb.ToString, conn)
cmd.CommandType = CommandType.Text
cmd.ExecuteNonQuery()
'Display a popup which indicates that the record was successfully inserted
Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "Script", "alert('Records Successfuly Saved!');", True)
Catch ex As System.Data.SqlClient.SqlException
Dim msg As String = "Insert Error:"
msg = (msg + ex.Message)
Throw New Exception(msg)
Finally
conn.Close()
End Try