我正在VB中编写ASP.NET web表单。我有一个GridView
,它包含以下列和行:
Product | Price | Quantity | Add to cart
iPhone 6 | $6000 |(DropDownList)| (Button)
iPhone 5 | $5000 |(DropDownList)| (Button)
此GridView
的行数取决于SQL Server数据库中的PRODUCT
表。
Product
列从PRODUCT
表中获取product_name
。
Price
列从PRODUCT
表中获取product_price
。
TemplateField
列Quantity
在每行上具有DropDownList
(成员:1、2、3)。
TemplateField
列Add to cart
在每一行上具有Button
。
我想做什么:
单击nth
行上的Button
应仅提交nth
行上DropDownList
的SelectedValue
。
如果DropDownList1
和Button
不在GridView
中(它们在Web表单中只出现一次),我可以使用DropDownList1.SelectedValue
,但我不知道当它们在GridView
中时,我如何做同样的事情。
我的问题是:如何以最简单的方式获得GridView
中DropDownList
的SelectedValue
?
以下代码可能会有所帮助。第一个代码块是GridView的,我想你已经用过了。想法是有一个TemplateField
和具有rowcommand
事件集的网格视图。TemplateField
将具有LinkButton
,命令名为CartAdd
,当RowCommand
被激发时,您将在第二个代码块中获得该事件,并从中获得DropDownList
的相应选定值。
<asp:GridView ID="gvw"
AutoGenerateColumns="False"
runat="server"
onrowcommand="gvw_RowCommand">
.... .
<asp:TemplateField HeaderText="View More">
<ItemTemplate>
<asp:LinkButton ID="btnCartAdd" CommandArgument='<%# Container.DataItemIndex %>'
CommandName="CartAdd" runat="server" Text="Add to cart" />
</ItemTemplate>
</asp:TemplateField>
代码隐藏的下一个代码块。
Protected Sub gvw_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
If e.CommandName = "CartAdd" Then
Dim index As Integer = Convert.ToInt32(e.CommandArgument.ToString())
Dim ddl As DropDownList = CType(gvw.Rows(index).FindControl("DDL_ID"), DropDownList) 'replce DDL_ID with required id used for dropdownlist
Dim val As String = ddl.SelectedValue
End If
End Sub