zoukankan      html  css  js  c++  java
  • 如何解决DataGrid中删除记录后分页错误

    经常遇到这样的问题,就是在DataGrid中删除了几条记录后,总页数已经改变,但当前所在的页并没有变,这时很有可能出现所在页小于总页数的可能,于会得到一个错误:当前页数不能小于0且不能大于总页数。

    这个问题往往在设计时被忽略,而且在测试时也很容易忽略掉,因为如果只是一条一条的删除记录,那么在最后一页上只有一条记录,以及正好删除这条记录的机率很小,所以可能被忽略掉。如果这样,可以在删除记录的代码后添加这样语句子防止错误:
                if(this.DataGrid1.CurrentPageIndex>0&&e.Item.ItemIndex==0)
                {
                    this.DataGrid1.CurrentPageIndex
    --;
                }
    上面条的条件正好是最后一页只有一条且要删除的。。。。

    还有一种情况,就是在一页中一次删除了多条记录,这时候就要记录删除的总数量,并计算总页数以及当前页数用来区分是否要回一页。
            private void LinkButton1_Click(object sender, System.EventArgs e)
            {
                CheckBox m_checkBox;
                
    int m_deleted        = 0;
                foreach(DataGridItem m_record in DataGrid1.Items)
                {
                    m_checkBox        
    = m_record.Cells[0].Controls[1as CheckBox;
                    
    long m_mailID    =0;
                    
    if(m_checkBox!=null&&m_checkBox.Checked)
                    {
                        m_mailID    
    = Convert.ToInt64(DataGrid1.DataKeys[m_record.ItemIndex]);
                        WaveMessages.DeleteMessagesByID(m_mailID);
                        m_deleted
    ++;
                    }
                }
                
    if((this.DataGrid1.Items.Count-m_deleted)/this.DataGrid1.PageSize<=this.DataGrid1.CurrentPageIndex)
                {
                    
    if(this.DataGrid1.CurrentPageIndex>0) this.DataGrid1.CurrentPageIndex--;
                }
                this.LoadMessagesData();
            }
    其中最后两个IF就是用来判断是否满足条件并回滚一页。
  • 相关阅读:
    反向代理与正向代理
    vs2017 调试时出现 cannot connect to runtime process错误
    .net core 配置swagger遇到的坑
    VC++下使用ADO操作数据库
    [转] CSS transition
    Javascript 函数和模块定义
    Service 如何知道caller
    [转] json in javascript
    [转] 让ctags支持Javascript
    [转] 使用NVM快速搭建NODE开发环境
  • 原文地址:https://www.cnblogs.com/WuCountry/p/334518.html
Copyright © 2011-2022 走看看