Asp.net 如何在GridView中对按钮单击事件进行编码,该事件从GridView中的行返回值
为这个略显复杂的标题道歉 基本上,我有一个项目,我有一个数据库连接到它。我使用GridView显示数据库的一些内容,GridView已经启动并运行,但是我设计页面的方式是,我需要能够在每一行中单击一个按钮,这实际上是将行中一个单元格的值导出到一个子例程 我在谷歌上搜索了很多,并尝试了一些我在这里找到的相关东西,但是我找不到任何我想要的功能 相关代码如下 标记:Asp.net 如何在GridView中对按钮单击事件进行编码,该事件从GridView中的行返回值,asp.net,vb.net,Asp.net,Vb.net,为这个略显复杂的标题道歉 基本上,我有一个项目,我有一个数据库连接到它。我使用GridView显示数据库的一些内容,GridView已经启动并运行,但是我设计页面的方式是,我需要能够在每一行中单击一个按钮,这实际上是将行中一个单元格的值导出到一个子例程 我在谷歌上搜索了很多,并尝试了一些我在这里找到的相关东西,但是我找不到任何我想要的功能 相关代码如下 标记: <asp:GridView ID="Staffgv" runat="server" AutoGenerateColumns="fa
<asp:GridView ID="Staffgv" runat="server" AutoGenerateColumns="false" OnRowCommand="Staffgv_RowCommand" AllowPaging="true" PageSize="20" OnPageIndexChanging="Staffgv_PageIndexChanging" BackColor="#f9f9f9" CssClass="gvStyle" >
<Columns>
<asp:TemplateField HeaderText="Start" InsertVisible="False" SortExpression="DateTimeStart">
<HeaderStyle Width="70px" CssClass="hdrGvStart"/>
<ItemTemplate>
<asp:Label ID="lblDateTimeStart" runat="server" Text='<%# Bind("DateTimeStart", "{0:t}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Finish" SortExpression="DateTimeEnd">
<HeaderStyle Width="70px" CssClass="hdrGvFinish"/>
<ItemTemplate>
<asp:Label ID="lblDateTimeEnd" runat="server" Text='<%# Bind("DateTimeEnd", "{0:t}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Forename" SortExpression="Forename">
<HeaderStyle Width="140px" CssClass="hdrGvForename"/>
<ItemTemplate>
<asp:Label ID="lblForename" runat="server" Text='<%# Bind("Forename") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Surname" SortExpression="Surname">
<HeaderStyle Width="140px" CssClass="hdrGvSurname"/>
<ItemTemplate>
<asp:Label ID="lblSurname" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderStyle CssClass="gvHeaderEdit" />
<ItemTemplate>
<asp:Button ID="Btnapptid" runat="server" Text="" CssClass="btnGVEdit" CommandName="FillStaffTables" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
如果有人想要更多的代码,比如用来填充GridView的代码,我会发布,只是不想发布太多不相关的代码
谢谢解决方案A
当单击按钮时,您只需要gridview行中的1个值。
您可以简单地使用按钮的CommandArgument
(Btnapptid
)。这假设在单击按钮时不需要gridview行索引。如果您确实需要,请参阅解决方案B,否则继续
首先,您需要在aspx页面中修改按钮的CommandArgument
ASPX
<asp:Button ID="Btnapptid" runat="server" Text="" CssClass="btnGVEdit"
CommandName="FillStaffTables" CommandArgument='<%# Bind("AppointmentID") %>'/>
解决方案B 单击按钮时需要gridview行中的多个值时 请注意,此解决方案需要对您的终端进行一些更改
Bind()
或codebehind中的RowDataBound
)row命令中
可以借助index
变量(来自您的示例)获取新创建的控件,如下所示
例子
假设您决定创建一个HiddenField
控件,用于存储数据库中的值
ASPX(隐藏字段应该在gridview中的某个地方-就在Btnapptid
下面就可以了)
然后只需使用hfMyControl
hfMyControl.Value
您还可以使用多个控件重复所有这些操作,以便潜在地访问gridview中控件中存储的多个DB值。对于您的第一条评论,答案是肯定的,解决方案A是理想的。这也会导致更少的代码。关于你的第二条评论:我想知道
hfMyControl
一开始是否没有填充值。尝试将Dim hfMyControl行后面的断点设置为HiddenField=DirectCast(Staffgv.Rows(index).FindControl(“hfMyControl”),HiddenField)
。检查1)变量hfMyControl
不是Nothing
和2)hfMyControl.Value
中是否包含某些内容。当单击Btnapptid
时,假设您想要AppointmentID
是否正确?基于您正在查找appointid
的假设,我编辑了解决方案A。它是仅仅基于此很难判断发生了什么,但这里有一些事情可以尝试:尝试将此添加到按钮使用submitbehavior=“False”
如果不起作用,请撤消该更改,然后尝试将按钮翻转为链接按钮
,看看这是否有帮助。请参阅相关答案:&。确保如果将其翻转到链接按钮
,请在Text=”“
部分中填写空字符串!如果这个文本属性像这样保持为空,我认为不会显示任何内容。
If (e.CommandName = "FillStaffTables") Then
txtAppointmentID.Text = e.CommandArgument
End If
Staffgv.Rows(index).FindControl("YOUR_CONTROLS_ID")
<asp:HiddenField ID="hfMyControl" runat="server" Visible="False"
Value='<%# Bind("SOME_DB_COLUMN") %>'/>
Dim hfMyControl As HiddenField = _
DirectCast(Staffgv.Rows(index).FindControl("hfMyControl"), HiddenField)
hfMyControl.Value