这个问题往往在设计时被忽略,而且在测试时也很容易忽略掉,因为如果只是一条一条的删除记录,那么在最后一页上只有一条记录,以及正好删除这条记录的机率很小,所以可能被忽略掉。如果这样,可以在删除记录的代码后添加这样语句子防止错误:
if
(this.DataGrid1.CurrentPageIndex
>
0
&&
e.Item.ItemIndex
==
0
)
{
this.DataGrid1.CurrentPageIndex -- ;
}
上面条的条件正好是最后一页只有一条且要删除的。。。。
{
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[ 1 ] as 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就是用来判断是否满足条件并回滚一页。
{
CheckBox m_checkBox;
int m_deleted = 0 ;
foreach(DataGridItem m_record in DataGrid1.Items)
{
m_checkBox = m_record.Cells[ 0 ].Controls[ 1 ] as 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();
}