将单击事件附加到网格视图中的图像上

时间:2018-04-30 11:04:31

标签: c# asp.net

我无法将点击事件附加到我在网格视图中存储的图像上。基本上它是一个删除按钮,允许用户根据按钮的位置删除特定的行。我已准备好c#中的代码,但是,我似乎无法将click事件附加到它。

这是按钮的标记代码

  <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 =&#34; gv_Quals_RowCommand&#34;

以下是点击事件

的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);
            }
        }
    }

这是我不断获取的编译错误

CS0123:&#39; gv_Quals_RowCommand&#39;匹配委托&#39; ImageClickEventHandler&#39;

我无法通过属性设置click事件,因为它存储在网格视图中,因此我无法通过那里访问它。此外,click事件不会像我使用调试

测试的那样运行

3 个答案:

答案 0 :(得分:3)

问题在于GridViewCommandEventArgs应该只是EventArgs

public void imgbDeleteP_Click(object sender, EventArgs e)

修改

  

我在你的代码中看到你使用Command Argument,所以如果你想使用它,你应该看到this post

     

基本上使用onCommand代替onClick或将发送者强制转换为按钮以获取命令参数,例如:

var argument = ((ImageButton)sender).CommandArgument;

答案 1 :(得分:1)

您是否尝试在页面加载期间关联该网格的点击事件?

答案 2 :(得分:1)

我认为这是因为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行。