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>

EventArgs VS GridViewRowEventArgs

首先,要理解GridViewRowEventArgs适用于事件:RowCreatedRowDataBound。这些事件不是按钮单击事件。

其次,当单击链接按钮时,可能会引发两个事件:LinkButton.ClickGridView.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;
   }
 }
相关文章:
  • 没有找到相关文章