通过在gridview中使用图像按钮来调用代码中的函数

时间:2012-01-18 14:49:34

标签: c# asp.net

  

可能重复:
  Calling a functon in code behind by using an imagebutton in a gridview

我在.aspx的gridview中有一个ImageButton点击这个图像按钮我必须调用一个函数。 这是我尝试的方式,并没有调用该功能。 代码inside.aspx页面:

<GridView ......>
    <asp:HyperLink ID="HyperLink2" runat="server"  NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"VehID","mngVeh.aspx?delid={0}") %>'>   
                                                         <asp:ImageButton runat="server" ID="DeleteUrlImageButton" ImageUrl="~/images/delete.jpeg" width='24' height='24'
                                                                          OnClick="DeleteUrlImageButton_Click"
                                                                          OnClientClick="return confirm('Are you sure you want to delete?');" />


   </asp:HyperLink>
</GridView>

.aspx.cs页面中的代码:

public void DeleteUrlImageButton_Click(object sender, EventArgs e)
{
    //code to perform the necessary action.
}

2 个答案:

答案 0 :(得分:0)

我认为你在这里混合控制。

我会在asp:超链接本身以及OnClick属性上使用ImageUrl。您可以使用NavigateUrl属性中的javascript来处理OnClientClick。

我没有看到嵌套ImageButton的原因 - 我怀疑这甚至有用。

或者,只需完全删除asp:超链接,然后在OnClick事件中重定向。

答案 1 :(得分:0)

这里的问题有两个:首先,点击事件不会在GridView中冒出来,这就是事件未被触发的原因。其次,ImageButton的每一行都会有一个GridView,您需要确定事件源自哪一行(或更准确地说,该行所对应的哪个基础数据源记录)。

解决此问题的常用方法是使用ImageButton.CommandNameImageButton.CommandArgument属性,并处理GridView.RowCommand事件。

标记:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton runat="server" ID="DeleteUrlImageButton" ImageUrl="~/images/delete.jpeg"
                            Width='24' Height='24' OnClientClick="return confirm('Are you sure you want to delete?');"
                            CommandName="MyDelete" CommandArgument='<%# Eval("RecordId") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

代码:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if ((e.CommandName == "MyDelete") && (e.CommandArgument != null))
    {

        //Add delete code here using e.CommandArgument to identify the correct record.
        //  For instance:
        MyDataObject obj = new MyDataObject();
        obj.RecordId = int.Parse(e.CommandArgument.ToString());
        MyDataObject.Delete(obj);
    }
}

编辑:我看到您在示例中提供了ID字段的名称,因此您可能希望将我的示例中的“RecordId”替换为“VehID”。