c# - Asp GridView 选择一行然后触发事件

标签 c# asp.net gridview

这是场景..

我有一个 GridView,其中包含 IDNameType 列。 Name 已启用点击并将重定向到其他页面。可以选择整行,并使用 jQuery 我更改了它的背景,以便将其识别为选定的行。

必须选择它的原因是因为页面上有一个链接,例如Delete。单击 Delete 时,它应该删除选定的行,但是当没有选定的行时,它应该什么都不做。

这是我的代码:

<asp:LinkButton ID="btnDelete" runat="server">Delete</asp:LinkButton>

<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;
        // redirect to edit page //
    }
}

我正在使用 jQuery 来指示选择了一行。

我已经有了 Delete 事件方法的代码,但我的问题是如何告诉编译器在单击 Delete 时当前选择了一行?

我正在考虑使用隐藏字段,在jQuery上,我会将隐藏字段的值设置为ID被选中的行。但是,我仍然不知道如何去做。

最佳答案

它很直。您可以将 SelectedIndex 存储在隐藏字段中,并通过索引找到 GridViewRow

在标记中添加隐藏字段,并将事件方法附加到链接按钮:

<asp:LinkButton ID="btnDelete" OnClick="btnDelete_Click" runat="server">Delete</asp:LinkButton>
<asp:HiddenField ID="hdnIndex" runat="server" />

<asp:GridView ID="gridView" runat="server" OnRowDataBound="gridView_RowDataBound"
    OnRowCommand="gridView_RowCommand" 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>

在 GridView RowDataBound 中添加一个属性来执行 javascript 以在隐藏字段中保存索引:

protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onclick", "javascript: getElementById('" + hdnIndex.ClientID + "').value='" + e.Row.RowIndex + "';");
    }    
}

LinkBut​​ton 的点击事件是这样的:

protected void btnDelete_Click(object sender, EventArgs e)
{
    int index = 0;
    int id = 0;

    if (int.TryParse(hdnIndex.Value, out index))
    {
        GridViewRow gvr = gridView.Rows[index];
        if (gvr != null &&  int.TryParse(gvr.Cells[0].Text, out id) )
        {
            // id is available here
            // do wahtever you want  with the id
            // even you can delete the record from db by id
        }               
    }
}

关于c# - Asp GridView 选择一行然后触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959034/

相关文章:

c# - 基于属性的路由 VS 基于约定的路由 - ASP.net Core RESTful API 的最佳实践

c# - 无法将位图转换为 IplImage

c# - 我怎样才能直接从url上传文件到服务器

android - 不同设备的网格数

c# - 如何根据 SQL 行中的值创建正确的子类

c# - 我可以在 ASP 表列中添加按钮并获取在哪一行按钮被单击吗?

ASP.NET Web Api - "PATCH"使用 Delta<...> 且双属性不起作用

c# - 当不需要 WCF DataMember 时

c# - 在 emptydata 模板 gridview 中使用客户端脚本代码

c# - 网站 gridview 无法在 azure 上的 iis 上工作