我有一个 GridView
,它有 ID
、Name
和 Type
。
代码隐藏:
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>
由于 HyperlinkField,Name
可以点击。这里的问题是我不希望在单击该行时触发 gridview_Command
。我只想要 Name
字段。例如,如果单击 Type
的列,则不要触发 gridView_Command
。
最佳答案
目前还不清楚您要实现的目标,但如果我理解正确的话,您需要更改一些内容。
- 您需要将列包装在
<asp:Gridview>
内标签。 - 您需要连接您的 RowDataBound 事件。
- 您需要创建一个模板列,以便您可以使用 CommandName 参数。
- 您需要在事件中过滤 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”的事件。
关于c# - Asp GridView 在整行上触发 Click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21956906/