这是场景..
我有一个 GridView
,其中包含 ID
、Name
和 Type
列。 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 + "';");
}
}
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
}
}
}
关于c# - Asp GridView 选择一行然后触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959034/