datagrid分页后不能实现删除确认了
如果不对datagrid分页的话, 删除确认是没问题的,但加了分页后,删除确认就一直出现错误,错误如下:e.Item.Cells[8].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
就是这行代码出现错误,一直提示cells[8]这个地方不对,说什么index有问题,我最后改为1是可以的,但是1不对应删除按钮啊!
确认删除 分页 --------------------编程问答-------------------- 8,应该是越界了吧,你如果只有8行的话index应该是要-1的噢。 --------------------编程问答--------------------
报index 一般都是索引越界问题 debug调试下 看看 call[index]是什么情况 --------------------编程问答-------------------- 这里应该是列而不是行吧?
图好像粘不了?我把datagrid列名说下:
编号、题目、发布时间、级别、作者、是否公开、浏览次数,后面还有两个按钮:审核、删除。
你说删除是不是第8列?不分页是没问题的,怀疑和分页有关! --------------------编程问答--------------------
看到出错点:cell的count属性为1 --------------------编程问答-------------------- 出错提示:指定的参数已超出有效值的范围。
参数名: index
但不分页的话是没有问题的! --------------------编程问答-------------------- 单元格貌似从0开始的 看下一共有几个cell --------------------编程问答-------------------- e.item.count() --------------------编程问答--------------------
e.item.count()
只有e.item.cells.count --------------------编程问答--------------------
单元格貌似从0开始的 看下一共有几个cell
是从0开始的,删除按钮的index正好是8 --------------------编程问答-------------------- 你后面两个按钮应该是在同一列吧?要找到删除
var btnDel = e.Item.Cells[7].Controls
.Cast<Control>()
.FirstOrDefault(ctrl => { var btn = ctrl as Button; return btn != null && btn.Text =="删除";});
if(btnDel != null) btnDel.Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
其实你完全可以用模板列写在aspx中
<asp:CommandField ButtonType="Button" HeaderText="编辑" ShowEditButton="True" ControlStyle-CssClass="RowButton" ItemStyle-HorizontalAlign="Center" />--------------------编程问答--------------------
<asp:TemplateField HeaderText="删除" ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="btDel" runat="server" CausesValidation="False" CommandName="Delete" Text="删除" OnClientClick="javascript:return confirm('确实要删除吗?');" />
</ItemTemplate>
</asp:TemplateField>
你后面两个按钮应该是在同一列吧?要找到删除
var btnDel = e.Item.Cells[7].Controls
.Cast<Control>()
.FirstOrDefault(ctrl => { var btn = ctrl as Button; return btn != null && btn.Text =="删除";});
if(btnDel != null) btnDel.Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
其实你完全可以用模板列写在aspx中
<asp:CommandField ButtonType="Button" HeaderText="编辑" ShowEditButton="True" ControlStyle-CssClass="RowButton" ItemStyle-HorizontalAlign="Center" />
<asp:TemplateField HeaderText="删除" ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="btDel" runat="server" CausesValidation="False" CommandName="Delete" Text="删除" OnClientClick="javascript:return confirm('确实要删除吗?');" />
</ItemTemplate>
</asp:TemplateField>
两个按钮不是同一列,是分别在两列的!但是不明白的是加了分页后为什么e.item.cells.count为1了,以前一直是8啊! --------------------编程问答--------------------
看不懂了 把代码贴上来看看 绑定的代码 --------------------编程问答--------------------
看不懂了 把代码贴上来看看 绑定的代码
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.DataGrid2.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgBulletin_ItemCreated);
}
#endregion
private void dgBulletin_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
e.Item.Cells[8].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
} --------------------编程问答--------------------
两个按钮不是同一列,是分别在两列的!但是不明白的是加了分页后为什么e.item.cells.count为1了,以前一直是8啊!
一种可能是e.Item这一行不是你想象的数据行,而是PagerRow或者FooterRow,所以就合并的一列 --------------------编程问答-------------------- 继续等待,希望有人能指点迷津,谢谢! --------------------编程问答-------------------- 我是预先把所有的行都添加了这么一个删除确认事件的,不是在点删除按钮时才加这个事件的! --------------------编程问答--------------------
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.datagrid(v=vs.85).aspx
void Item_Bound(Object sender, DataGridItemEventArgs e)
{
ListItemType itemType = (ListItemType)e.Item.ItemType;
if ((itemType != ListItemType.Header) &&
(itemType != ListItemType.Footer) &&
(itemType != ListItemType.Separator))
{
// Get the IntegerValue cell from the grid's column collection.
TableCell intCell = (TableCell)e.Item.Controls[0];
// Add attributes to the cell.
intCell.Attributes.Add("id", "intCell" + e.Item.ItemIndex.ToString());
intCell.Attributes.Add("OnClick",
"Update_intCell" +
e.Item.ItemIndex.ToString() +
"()");
// Add attributes to the row.
e.Item.Attributes.Add("id", "row" + e.Item.ItemIndex.ToString());
e.Item.Attributes.Add("OnDblClick",
"Update_row" +
e.Item.ItemIndex.ToString() +
"()");
}
各种绑定 不知道有适合你的没
骚年c#有什么不懂就在这里输入
http://msdn.microsoft.com/library/default.aspx --------------------编程问答-------------------- 谢谢各位,我的问题是分页前是正常的,分页后确认删除出现了问题,难道分页会对添加的确认删除对话框有影响? --------------------编程问答-------------------- 改为e.item.cells[0].Attrbutes.add(......
则会在点击页码处时出现删除确认提示框,为什么? --------------------编程问答-------------------- 楼主你的删除按钮在第几列?假设是n列
e.Item.Cells[n-1].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");--------------------编程问答--------------------
楼主你的删除按钮在第几列?假设是n列e.Item.Cells[n-1].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
第9列,我用cells[8]应该没问题啊?!
现在e.item.cells.count为1,我设为0后,发现在点击页码时出现确认删除的对话框!不知为什么跑到页码那去了! --------------------编程问答--------------------
楼主你的删除按钮在第几列?假设是n列e.Item.Cells[n-1].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
第9列,我用cells[8]应该没问题啊?!
现在e.item.cells.count为1,我设为0后,发现在点击页码时出现确认删除的对话框!不知为什么跑到页码那去了!
不是跟你说了,因为e.Item对应的是Footer那一行,而且被合并为一列了才导致的
你可以参考17#在事件开头过滤,只处理数据行
补充:.NET技术 , ASP.NET