我希望在Gridview的TemplateFields中使用一个不被隐藏的控件作为列,并在每一列的结尾放置一个按钮。我的问题是,我应该使用什么控件,并如何获取在GridView中特定行上点击按钮的那一列的数值。
你想获取什么值?
你可以处理按钮的点击事件,并将 sender
转换为 Button
,将它的 NamingContainer
转换为 GridViewRow
。然后你就有了在该行中查找其他控件所需的一切。
protected void Button1_Clicked(Object sender, EventArgs e)
{
// get the button reference
Button btn = (Button) sender;
GridViewRow row = (GridViewRow) btn.NamingContainer;
// assuming the primary key value is stored in a hiddenfield with ID="HiddenID"
HiddenField hiddenID = (HiddenField) row.FindControl("HiddenID");
int id = int.Parse(hiddenID.Value);
}
aspx (GridView's TemplateField)
<asp:Button ID="Button1" runat="server" Text="Click Me" OnClick="Button1_Clicked"/>
<asp:HiddenField ID="HiddenID" runat="server" Value='<%# Eval("PrimaryKeyField") %>'/>
GridView
的列中使用HiddenField
,因为该控件不可见,从而满足您的需求。代码将在gridview的行命令中进行处理。 public void gdView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "sendvalue")
{
for (int i = 0; i < gdView.Rows.Count; i++)
{
int getrow = Convert.ToInt32(e.CommandArgument);
HiddenField HiddenField1 = (HiddenField)gdView.Rows[getrow].FindControl("HiddenField1");
}
}
其中的e.CommandName == "sendvalue"是因为按钮的command name属性设置为“sendvalue”。
设计中的HiddenField将被表示为:
<asp:HiddenField ID="HiddenField1" runat="server"/>
您可以通过在行数据绑定期间将要单击的按钮的CommandArgument
属性设置为所需值来更改方法。