EventArgs VS GridViewRowEventArgs
本文关键字:GridViewRowEventArgs VS EventArgs | 更新日期: 2023-09-27 18:16:04
我正试图从asp.net网格视图访问按钮单击事件。如果我把我的语法这样
protected void Remove(Object sender, GridViewRowEventArgs e)
{
}
他们没有编译错误,但我得到了一个调试错误。
"的重载与委托的"系统"不匹配。事件处理程序的
如果我把语法改成这个
protected void Remove(Object sender, EventArgs e)
{
var command = ((Button)sender).CommandArgument;
if (command.CommandName == "Remove")
{
DataGridItem gr = (DataGridItem)command.NamingContainer;
string abcd = gr.Cells[0].Text;
}
}
我得到多个编译错误:
"string"不包含"CommandName"的定义,也没有接受"string"类型的第一个参数的扩展方法"CommandName可以找到(您是否缺少使用指令或程序集引用?(
"string"不包含"NamingContainer"的定义,也没有接受"string"类型的第一个参数的扩展方法"NamingContainer"可以找到(您是否缺少使用指令或程序集引用?(
我想做的是从网格视图中的按钮按下事件访问值并运行存储过程。
这是aspx标记
<asp:GridView ID="gvwEditDashboard" runat="server" AutoGenerateColumns="False" ShowFooter="true" CssClass="DataGrids"
Width="500px" HorizontalAlign="Center" GridLines="Both" >
<Columns>
<ItemTemplate>
<asp:LinkButton ID = "btnDelete" runat = "server" CssClass="ButtonLink" Text = "[Delete]" OnClick = "Remove" />
</ItemTemplate>
</Columns>
</asp:GridView>
首先,要理解GridViewRowEventArgs
适用于事件:RowCreated
和RowDataBound
。这些事件不是按钮单击事件。
其次,当单击链接按钮时,可能会引发两个事件:LinkButton.Click
和GridView.RowCommand
。
我的建议是使用/处理GridView的RowCommand
事件。
有许多技术可以获取此事件中单击按钮的行的数据。
针对您的具体情况,将LinkButton声明为:
<ItemTemplate>
<asp:LinkButton ID = "btnDelete" runat = "server"
CssClass="ButtonLink" Text = "[Delete]" OnClick = "Remove"
CommandArgument="<%# Container.DataItemIndex %>" />
</ItemTemplate>
请注意LinkButton的CommandArgument
属性。
以及RowCommand事件。请注意,第二个参数是GridViewCommandEventArgs
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
// The RowIndex of the Row where LinkButton was clicked
int rowIndex = Convert.ToInt32(e.CommandArgument);
// Get the GridView Row
GridViewRow row = GridView1.Rows[rowIndex];
// Read the Column values
// e.g. for BoundFields use row.Cells[]
string Column_1_Value = row.Cells[0].Text;
// for Columns defined using <itemTemplate> etc...
// row.FindControl("<Control_ID>")
string firstName = (row.FindControl("txtFirstName") as TextBox).Text;
}
除了LinkButton,您还可以使用ButtonFields
。检查此链接处的行命令事件。MSDN示例很好地解释了如何读取行数据。
protected void Remove(Object sender, EventArgs e)
{
var command = ((Button)sender).CommandArgument;
if (command.CommandName == "Remove")
{
DataGridItem gr = (DataGridItem)command.NamingContainer;
string abcd = gr.Cells[0].Text;
}
}
var.CommandArgument的危害是按钮上的字符串类型。您收到该错误是因为字符串没有CommandName或NamingContainer属性。
尝试以下操作:
protected void Remove(Object sender, CommandEventArgs e)
{
if (e.CommandName == "Remove")
{
DataGridItem gr = e.NamingContainer;
string abcd = gr.Cells[0].Text;
}
}