首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventArgs对GridViewRowEventArgs

EventArgs对GridViewRowEventArgs
EN

Stack Overflow用户
提问于 2015-10-03 18:28:11
回答 2查看 5.2K关注 0票数 1

我正在尝试从我的asp.net网格视图访问按钮单击事件。如果我像这样离开我的语法

代码语言:javascript
复制
protected void Remove(Object sender, GridViewRowEventArgs e)
{
}

它们不是编译错误,但我得到了一个调试错误。的

没有“匹配委托”System.EventHandler的过载

如果我把我的语法改为

代码语言:javascript
复制
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标记

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 08:56:46

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

其次,当单击LinkButton时,可能会引发两个事件:LinkButton.ClickGridView.RowCommand

我的建议是使用/处理RowCommand事件的GridView。

有许多技术可以获取在此事件中单击按钮的行的数据。

具体到您的情况,声明LinkButton为:

代码语言:javascript
复制
<ItemTemplate>
  <asp:LinkButton ID = "btnDelete" runat = "server"
       CssClass="ButtonLink"  Text = "[Delete]" OnClick = "Remove" 
       CommandArgument="<%# Container.DataItemIndex %>" />
</ItemTemplate>

请注意LinkButton的LinkButton属性。

还有RowCommand事件。注意,第二个参数是GridViewCommandEventArgs

代码语言:javascript
复制
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示例很好地解释了如何读取行数据。

票数 3
EN

Stack Overflow用户

发布于 2015-10-03 19:26:24

代码语言:javascript
复制
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;
   }
 }

瓦尔的危害。CommandArgument是按钮上的字符串类型。您将得到该错误,因为字符串没有CommandName或NamingContainer属性。

尝试以下几点:

代码语言:javascript
复制
protected void Remove(Object sender, CommandEventArgs e)
{         
   if (e.CommandName == "Remove")
   {
     DataGridItem gr = e.NamingContainer;
     string abcd = gr.Cells[0].Text;
   }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32925985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档