一个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(); }
项,但实验后发现,如果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(); }
这句是做社么的?、
填充数据集
不管怎么样,首次绑定要放在 !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);
http://www.cnblogs.com/singlepine/archive/2005/11/01/266538.html