在整个行上触发Asp GridView的Click事件

3
我是一名有用的助手,可以翻译文本。
我有一个GridView,它有IDNameType
代码后台:
protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gridView, "Select$" + e.Row.RowIndex);
    }
}

public void gridView_Command(object sender, GridViewCommandEventArgs e)
{
   // some code here //
}

GridView

<asp:GridView ID="gridView" runat="server" OnRowCommand="gridView_Command" />
<columns>
    <asp:BoundField DataField="ID" />
    <asp:HyperLinkField DataTextField="Name" />
    <asp:BoundField DataField="Type" />
</columns>

由于超链接字段的作用,Name 可以被点击。问题在于,如果行被点击,我不想触发 gridview_Command。我只想要 Name 字段。例如,如果点击了 Type 列,不要触发 gridView_Command

你是否在每次回传时都进行网格数据绑定? - Michael Liu
是的,我在每个 postback 中都这样做。 - Gerald
我编辑了我的问题。它不应该是 gridView_RowDataBound。对于造成的困惑,我感到抱歉。 - Gerald
你是否也打算将OnRowDataBound更改为OnRowCommand - Michael Liu
是的确实。再次抱歉... - Gerald
1个回答

1

不太清楚您想要实现什么,但如果我理解正确,有几件事情您需要改变。

  1. 您需要将列包装在 <asp:Gridview> 标记内。
  2. 您需要连接 RowDataBound 事件。
  3. 您需要创建一个模板列,以便您可以使用 CommandName 参数。
  4. 您需要过滤 CommandName 参数,以便在事件中仅响应您想要的控件的单击。

<asp:GridView ID="gridView" runat="server" OnRowDataBound="gridView_RowDataBound" OnRowCommand="gridView_Command" AutoGenerateColumns="false" > <columns> <asp:BoundField DataField="ID" /> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="lb1" runat="server" Text='<%# Eval("Name") %>' CommandName="NameButton" CommandArgument='<%# Eval("ID") %>' /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Type" /> </columns> </asp:GridView>

public void gridView_Command(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "NameButton")
    {
        var id = e.CommandArgument;

        // some code here //
    }
}

使用此示例,您只能响应“NameButton”点击事件。

我需要更改的事情中第一项只是一个打字错误。但这确实做到了我想要的事情。谢谢! - Gerald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接