一个DataList(名为dlMsgList),在其项模板中有一个CheckBox(名为chk),另外,该DataList使用了PagedDataSource 为其做分页处理。设想是这样:点击某按钮后,将该DataList中所有CheckBox打上勾的项删除掉,首先必须获取到被选择的
项,但实验后发现,如果dlMsgList.DataBind()写在if(!isPostBack)条件中,可以获取到被选择的项,但PagedDataSource却无法实现分页;如果将dlMsgList.DataBind()写在if(!isPostBack)条件外,则PagedDataSource可以分页,但无法获取到
被选择的项,具体症状就是一点按钮,屏幕刷屏后,原先被选中的CheckBox又会恢复到未选中的状态,请问高手,如何实现鱼和熊掌兼得的问题?具体代码如下:private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
try
{
this.daRecMsg.Fill(this.smsDataSet);
dataGridBind();


}
catch(Exception ae)
{

}
}public void dataGridBind()
{
int currPage = int.Parse(this.lblNowPage.Text);
PagedDataSource ps = new PagedDataSource();
DataView Recdv = new  DataView(smsDataSet.ReceivMessage);
Recdv.RowFilter = "ReceiveName = '"+Session["LoginName"].ToString()+"'and status = 0";
lblCount.Text = Recdv.Count.ToString();
ps.DataSource = Recdv;
ps.AllowPaging = true;
ps.PageSize = 1;
ps.CurrentPageIndex = currPage-1;
this.lblFirst.Enabled = true;
this.lblPrve.Enabled = true;
this.lblNext.Enabled = true;
this.lblLast.Enabled = true;
if(currPage ==1)
{
this.lblFirst.Enabled = false;
this.lblPrve.Enabled = false;
}
if(currPage ==ps.PageCount)
{
this.lblNext.Enabled = false;
this.lblLast.Enabled = false;
}
this.lblAllCount.Text = ps.PageCount.ToString();
this.dlMsgList.DataSource = ps;
this.dlMsgList.DataBind();
if(!IsPostBack)
{
for(int i=1;i<= ps.PageCount;i++)
{
ddlPageCount.Items.Add(i.ToString());
}


}
}
private void lblFirst_Click(object sender, System.EventArgs e)
{
this.lblNowPage.Text = "1";
this.dataGridBind();

}private void lblPrve_Click(object sender, System.EventArgs e)
{
this.lblNowPage.Text = (int.Parse(this.lblNowPage.Text)-1).ToString();
this.dataGridBind();
}private void lblNext_Click(object sender, System.EventArgs e)
{
this.lblNowPage.Text = (int.Parse(this.lblNowPage.Text)+1).ToString();
this.dataGridBind();
}private void lblLast_Click(object sender, System.EventArgs e)
{
this.lblNowPage.Text = this.lblAllCount.Text;
this.dataGridBind();

}private void ddlPageCount_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.lblNowPage.Text = ddlPageCount.SelectedItem.Text;
this.dataGridBind(); }

解决方案 »

  1.   

    分页程序为什么不单独写出来呢? 不用 PagedDataSource,采取其它方法实现分页。
      

  2.   

    this.daRecMsg.Fill(this.smsDataSet);
    这句是做社么的?、
      

  3.   

    this.daRecMsg.Fill(this.smsDataSet);
    填充数据集
      

  4.   

    1.
    不管怎么样,首次绑定要放在 !IsPostBack 内2.
    填充数据集放到  dataGridBind() 方法内
    try -->>
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    try
    {
    this.daRecMsg.Fill(this.smsDataSet);
    dataGridBind();
    }
    catch(Exception ae)
    {} 
    }public void dataGridBind()
    {
    int currPage = int.Parse(this.lblNowPage.Text);
    》》》》private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack) {
    dataGridBind();
    }
    }public void dataGridBind()
    {
    this.daRecMsg.Fill(this.smsDataSet);
    int currPage = int.Parse(this.lblNowPage.Text);
      

  5.   

    ps.AllowPaging = true;这句写在控件里面应该就可以了!!
      

  6.   

    楼主可以去看看小山的blog
    http://www.cnblogs.com/singlepine/archive/2005/11/01/266538.html