C# 将单击事件附着到栅格视图中的图像上
我无法将单击事件附加到存储在栅格视图中的图像上。基本上,它是一个删除按钮,允许用户根据按钮的位置删除特定行。我已经准备好了c#中的代码,但是,我似乎无法将单击事件附加到它 这是按钮的标记代码C# 将单击事件附着到栅格视图中的图像上,c#,asp.net,C#,Asp.net,我无法将单击事件附加到存储在栅格视图中的图像上。基本上,它是一个删除按钮,允许用户根据按钮的位置删除特定行。我已经准备好了c#中的代码,但是,我似乎无法将单击事件附加到它 这是按钮的标记代码 <asp:TemplateField HeaderText="Remove" ItemStyle-HorizontalAlign="Center"> <ItemTemplate>
<asp:TemplateField HeaderText="Remove" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="imgbDeleteP" runat="server" BORDER="0" CausesValidation="false" ImageUrl="~/img/Del.png" Height="25px" ImageAlign="Middle"
onClick ="gv_Quals_RowCommand" CommandArgument="<%#Container.DataItemIndex%>" CommandName="Remove" />
</ItemTemplate>
onClick=“gv\u Quals\u RowCommand”
下面是用c#表示单击事件的代码
protected void gv_Quals_RowCommand(object sender, GridViewCommandEventArgs e)
{
if ((e.CommandName == "Remove"))
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gv_Quals.Rows[index];
DataTable dtCurrentTable = (DataTable)Session["CurrentTable"];
dtCurrentTable.Rows[index].Delete();
if ((dtCurrentTable.Rows.Count < 0))
{
}
else if ((row.Cells[0].Text != "*New*"))
{
int appId = 5000;
//int appId = 1;
string insProg = ("delete from projectunitassignment where UnitId =" + int.Parse(row.Cells[0].Text));
SqlCommand cmd = new SqlCommand(insProg, conn);
cmd.Connection.Close();
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
RebindCat(appId);
}
}
}
受保护的void gv_Quals_row命令(对象发送方,GridViewCommandEventArgs e)
{
如果((e.CommandName==“删除”))
{
int index=Convert.ToInt32(e.CommandArgument);
GridViewRow行=gv_Quals.Rows[索引];
DataTable dtCurrentTable=(DataTable)会话[“CurrentTable”];
dtCurrentTable.Rows[index].Delete();
如果((dtCurrentTable.Rows.Count<0))
{
}
else if((行。单元格[0]。文本!=“*新*”)
{
int-appId=5000;
//int-appId=1;
字符串insProg=(“从projectunitassignment中删除,其中UnitId=“+int.Parse(row.Cells[0].Text));
SqlCommand cmd=新的SqlCommand(insProg,conn);
cmd.Connection.Close();
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
RebindCat(appId);
}
}
}
这就是我一直遇到的编译错误
CS0123:gv\u Quals\u RowCommand'与委托“ImageClickEventHandler”匹配时没有重载。
我无法通过属性设置单击事件,因为它存储在网格视图中,因此我无法通过网格视图访问它。此外,单击事件没有运行,因为我已经通过调试进行了测试。在页面加载期间,您是否尝试将该网格的单击事件关联起来?问题在于
GridViewCommandEventArgs
应该是EventArgs
public void imgbDeleteP_Click(object sender, EventArgs e)
编辑:
我看到您的代码中使用了Command参数,所以如果您想使用它,您应该看到
基本上使用onCommand
而不是onClick
或将发送者强制转换为按钮来获取命令参数,类似于:
我认为这是因为
GridViewCommandEventArgs
通常用于RowCommand
,将其更改为EventArgs
,因此事件应该是这样的:
protected void gv_Quals_RowCommand(object sender, EventArgs e)
{
ImageButton btn = (ImageButton)sender;
string cmName= btn.CommandName;
string cmArgument= btn.CommandArgument;
if ((cmName == "Remove"))
{
.....
}
}
或获取行索引:
GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;
int index = gvRow.RowIndex;
第一个父项是
GridView
单元格,而GridView
单元格的第二个父项是GridView行。我不知道你的意思,你能显示一个示例吗?请检查“不,我不能”。网格视图中的按钮,因此除非找到控件,否则我无法通过id访问它。请尝试将id作为参数之一发送,这样您也可以拥有更多的控件。我认为这是因为GridViewCommandEventArgs
通常用于RowCommand
,将其更改为EventArgs
否则您可以按照@Aria AnswerI进行操作。我刚刚将其更改为CommandArgument,现在它可以工作了,谢谢!
GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;
int index = gvRow.RowIndex;