我正在尝试从我的asp.net网格视图访问按钮单击事件。如果我像这样离开我的语法
protected void Remove(Object sender, GridViewRowEventArgs e)
{
}它们不是编译错误,但我得到了一个调试错误。的
没有“匹配委托”System.EventHandler的过载
如果我把我的语法改为
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>发布于 2015-10-05 08:56:46
首先,要理解GridViewRowEventArgs是用于事件的:RowCreated和RowDataBound。这些事件不是按钮单击事件。
其次,当单击LinkButton时,可能会引发两个事件:LinkButton.Click和GridView.RowCommand。
我的建议是使用/处理RowCommand事件的GridView。
有许多技术可以获取在此事件中单击按钮的行的数据。
具体到您的情况,声明LinkButton为:
<ItemTemplate>
<asp:LinkButton ID = "btnDelete" runat = "server"
CssClass="ButtonLink" Text = "[Delete]" OnClick = "Remove"
CommandArgument="<%# Container.DataItemIndex %>" />
</ItemTemplate>请注意LinkButton的LinkButton属性。
还有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示例很好地解释了如何读取行数据。
发布于 2015-10-03 19:26:24
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属性。
尝试以下几点:
protected void Remove(Object sender, CommandEventArgs e)
{
if (e.CommandName == "Remove")
{
DataGridItem gr = e.NamingContainer;
string abcd = gr.Cells[0].Text;
}
}https://stackoverflow.com/questions/32925985
复制相似问题