当前位置:编程学习 > C#/ASP.NET >>

datagrid分页后不能实现删除确认了

如果不对datagrid分页的话, 删除确认是没问题的,但加了分页后,删除确认就一直出现错误,错误如下:
e.Item.Cells[8].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");
就是这行代码出现错误,一直提示cells[8]这个地方不对,说什么index有问题,我最后改为1是可以的,但是1不对应删除按钮啊!
确认删除 分页 --------------------编程问答-------------------- 8,应该是越界了吧,你如果只有8行的话index应该是要-1的噢。 --------------------编程问答--------------------
引用 1 楼 u011781558 的回复:
8,应该是越界了吧,你如果只有8行的话index应该是要-1的噢。

报index 一般都是索引越界问题  debug调试下 看看 call[index]是什么情况 --------------------编程问答-------------------- 这里应该是列而不是行吧?
图好像粘不了?我把datagrid列名说下:
编号、题目、发布时间、级别、作者、是否公开、浏览次数,后面还有两个按钮:审核、删除。
你说删除是不是第8列?不分页是没问题的,怀疑和分页有关! --------------------编程问答--------------------
引用 2 楼 Hsuifengershi 的回复:
Quote: 引用 1 楼 u011781558 的回复:

8,应该是越界了吧,你如果只有8行的话index应该是要-1的噢。

报index 一般都是索引越界问题  debug调试下 看看 call[index]是什么情况

看到出错点:cell的count属性为1 --------------------编程问答-------------------- 出错提示:指定的参数已超出有效值的范围。
参数名: index
但不分页的话是没有问题的! --------------------编程问答-------------------- 单元格貌似从0开始的  看下一共有几个cell --------------------编程问答-------------------- e.item.count() --------------------编程问答--------------------
引用 7 楼 Hsuifengershi 的回复:
e.item.count()

只有e.item.cells.count --------------------编程问答--------------------
引用 6 楼 Hsuifengershi 的回复:
单元格貌似从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>
--------------------编程问答--------------------
引用 10 楼 dongxinxi 的回复:
你后面两个按钮应该是在同一列吧?要找到删除
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啊! --------------------编程问答--------------------
看不懂了 把代码贴上来看看 绑定的代码 --------------------编程问答--------------------
引用 12 楼 Hsuifengershi 的回复:

看不懂了 把代码贴上来看看 绑定的代码

#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('确实要删除吗?');");
    } --------------------编程问答--------------------
引用 11 楼 wgz80930 的回复:
两个按钮不是同一列,是分别在两列的!但是不明白的是加了分页后为什么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('确实要删除吗?');");
--------------------编程问答--------------------
引用 20 楼 cnceohjm 的回复:
楼主你的删除按钮在第几列?假设是n列
e.Item.Cells[n-1].Attributes.Add("onclick", "javascript:return confirm('确实要删除吗?');");

第9列,我用cells[8]应该没问题啊?!
现在e.item.cells.count为1,我设为0后,发现在点击页码时出现确认删除的对话框!不知为什么跑到页码那去了! --------------------编程问答--------------------
引用 21 楼 wgz80930 的回复:
Quote: 引用 20 楼 cnceohjm 的回复:

楼主你的删除按钮在第几列?假设是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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,