Asp GridView选择一行然后激活事件

时间:2014-02-22 19:03:35

标签: c# asp.net gridview

这是方案..

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

必须选择它的原因是因为页面上存在link,例如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时当前选择了一行?

我正在考虑使用hidden field,而在jQuery上,我会将隐藏字段的值设置为所选行的ID。但是,我仍然不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

非常直接。您可以将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 + "';");
    }    
}

LinkButton的点击事件是这样的:

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
        }               
    }
}

答案 1 :(得分:0)

我猜命令论证就是你要搜索的...... Check this link
 您只需要将Id using命令参数从前端传递到代码文件,然后就可以轻松删除它。