您好,是否可以使用jQuery获取gridview的当前rowindex?
背景:
我使用模板字段中的服务器端链接按钮从gridview中删除行,如下所示:
<asp:LinkButton CausesValidation="false" CommandName="Delete" ID="lnkDelete"
OnClientClick="javascript: return(confirm('Delete item?'));" runat="server" Text="Delete" />
提示用户确认或取消删除。如果用户单击“确定”,则会在代码隐藏中调用此方法:
protected void GridViewRowDeleting(object sender, GridViewDeleteEventArgs e)
{
this.gridview_uploads.EditIndex = -1;
if (!this.UploadsList.Count.Equals(0))
{
DocumentUpload upload = this.UploadsList[e.RowIndex];
if (upload != null)
{
this.UploadsList.RemoveAt(e.RowIndex);
this.BindInputGridview();
}
}
}
但是javascript确认(删除项目?)看起来有点不自在。
我更喜欢使用类似JQuery的对话框,但如果我这样做,我不知道如何使用这种方法获取rowindex(我可以弄清楚如何调用服务器代码)。
有什么想法吗?
很抱歉,如果已经有人问过这个问题 - 我拖了一下SO并用谷歌搜索了它,但找不到任何有用的东西。
答案 0 :(得分:3)
如果LinkButton
是GridView中唯一的LinkButton / Anchor,那么你应该可以做类似的事情
$('#GridView1 a').click(function(){
return confirm("Delete Item");
});
编辑:将#GridView1更改为控件的.net ID。
VB
<%=(me.GridView1.ClientID)%>
C#
<%=(this.GridView1.ClientID)%>
回复adrianos
如果您查看jQuery UI Dialog,这会有一个很好的模态确认框。
以与上述代码类似的方式,但替换confirm函数,您可以:
<script type="text/javascript">
$().ready(function(){
$( "#dialog" ).dialog( "destroy" );
$( "#dialog-confirm" ).dialog({
resizable: false,
height:140,
modal: true,
autoOpen: false;
buttons: {
"Delete item": function() {
$( this ).dialog( "close" );
// Put in your return true/false here to activate button
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
$('#GridView1 a').click(function(){
$('#dialog-confirm').dialog("open");
return false;
});
)};
</script>
答案 1 :(得分:3)
我想出了如何使用__doPostBack方法(在Javascript中)这样做
隐藏字段:
<asp:HiddenField ID="hidden_gridRowIndex" runat="server" />
在脚本标记中:
$(document).ready
(
function () {
$("#div_dialog_confirmUploadDelete").dialog({
autoOpen: false
, title: "Delete upload"
, buttons: {
"OK": function () {
__doPostBack('GridViewRowDelete', $("#<%# hidden_gridRowIndex.ClientID %>").val());
$(this).dialog('close');
}
, "Cancel": function () { $(this).dialog('close'); }
}
});
});
function deleteConfirm(index) {
$("#<%# hidden_gridRowIndex.ClientID %>").val(index)
$("#div_dialog_confirmUploadDelete").dialog('open');
}
在gridview上:
<asp:TemplateField>
<ItemTemplate>
<a href="javascript: void(0);" onclick='javascript:return deleteConfirm(<%# Container.DataItemIndex %>);'>Delete</a>
</ItemTemplate>
</asp:TemplateField>
在Page_Load:
if (Request["__EVENTTARGET"] != null)
{
switch (Request["__EVENTTARGET"])
{
case "GridViewRowDelete":
if (Request["__EVENTARGUMENT"] != null)
{
int index = -1;
if (int.TryParse(Request["__EVENTARGUMENT"], out index))
{
this.GridViewRowDelete(index);
}
}
break;
}
}
page_load调用的新方法:
protected void GridViewRowDelete(int rowIndex)
{
this.gridview_uploads.EditIndex = -1;
if (!this.UploadsList.Count.Equals(0))
{
DocumentUpload upload = this.UploadsList[rowIndex];
if (upload != null)
{
this.UploadsList.RemoveAt(rowIndex);
this.BindInputGridview();
}
}
}
考虑到这一点,我可能已经使asp:HiddenField成为一个常规的html隐藏输入控件,因为服务器端永远不需要看到它。
感觉有点松懈,所以请随意向我扔石头/建议改进。
答案 2 :(得分:2)
向网格添加自定义属性并在绑定事件
上设置值 <asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="#" test='<%# Container.DataItemIndex %>'>content</a>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
使用.net clientId获取自定义属性值。
$(document).ready(function () {
$('#<%=(this.GridView1.ClientID)%> a').click(function () {
return alert("Last Name : " + this.getAttribute("test") );
})
}
);