我有一个gridview控件,显示从DB返回的数据。 gridview的datakey属性绑定到DB的ID列
GV中的每条记录都有2个按钮和一个复选框。单击这些控件中的任何一个时,我想获取单击该行的行并根据单击的控件执行操作。
我希望我可以使用row_command
事件来捕获哪个控件被点击但是除非我遗漏了某些东西,否则它不会起作用
答案 0 :(得分:0)
您是否指定了按钮“CommandName
和CommandArgument
?
答案 1 :(得分:0)
同样的问题可能在于错误的生命周期事件序列。您应该尽快将数据重新绑定到网格中。尝试将数据绑定移至Page_Init
事件
答案 2 :(得分:0)
代码背后:
protected void gvCustomers_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("RowSelected"))
{
GridViewRow row = (((e.CommandSource) as Button).NamingContainer) as GridViewRow;
Label label = row.FindControl("lblFirstName") as Label;
Response.Write(label.Text);
}
}
这是ASPX视图:
<asp:GridView AutoGenerateColumns="false" ID="gvCustomers" runat="server" OnRowCommand="gvCustomers_RowCommand" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblFirstName" runat="server" Text ='<%# Eval("FirstName") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button Text="Select" ID="btn1" runat="server" CommandArgument ='<%# Eval("FirstName") %>' CommandName="RowSelected" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
答案 3 :(得分:0)
<asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"OnRowCommand="gvProduct_RowCommand" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="btnEdit" runat="server" CommandName="EditCommand" Text="Edit" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ProjectNo" HeaderText="ProjectNo" />
<asp:BoundField DataField="Date" HeaderText="Date" />
<asp:BoundField DataField="Shift" HeaderText="شیفت" />
</Columns>
</asp:GridView>
这个代码:
protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditCommand")
{
GridViewRow Row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int productID = Convert.ToInt32(gvProduct.DataKeys[Row.RowIndex].Value);
EditFunction(productID);
}
}
EditFunction
是您为所选行设置代码的功能,我将其删除。
你需要这样的东西吗?