DataGrid翻页问题,请高手指点.在线等等等高手!

rybgroup 2004-10-30 08:50:26
说明:这个页面做了一个搜索功能.页面默认载入初始数据并绑定GridData控件,其分页功能完全正常.但是按搜索功能后,有时会出现如下面的错误提示:
1.如果按部门搜索到多于一页记录,比如有三页,那么第一页显示正常的,当按下一页时则变成页面默认载入时的页面了.而不是刚刚搜索到的数据.请问这是怎么回事.
有人说是DataGrid1.CurrentPageIndex = e.NewPageIndex;的问题,但是我如何在搜索函数里调用这个呢?或者有没有其他更好的办法?请高手予以详细指点.
另外,再向各位高手请教,我觉得我的程序写的很繁烦,如何改进?

namespace ryb
{
private void Page_Load(object sender, System.EventArgs e)
{
//DataGrid控件初始化
if(!IsPostBack)
{
getdepname();
BindGrid();
Showstats();
}
}
//初始化部门控件值
private void getdepname()
{
Drp_dep.Items.Clear();
SqlConnection conn=new SqlConnection(path);
conn.Open();
SqlCommand cmd=new SqlCommand("sp_seldepname",conn);
cmd.CommandType=CommandType.StoredProcedure;
SqlDataReader myDataReader=cmd.ExecuteReader();
Drp_dep.Items.Add("所有部门");
while(myDataReader.Read()==true)
{
Drp_dep.Items.Add(myDataReader.GetString(1).ToString());
}
conn.Close();
}


private void BindGrid()
{
SqlConnection con=new SqlConnection(path);
SqlCommand cmd=new SqlCommand("sp_showhumanlist",con);
con.Open();
DataSet ds = new DataSet();
cmd.CommandType = CommandType.StoredProcedure; // use stored proc for perf
SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
dap.Fill(ds);
DataGrid1.DataSource = ds.Tables[0].DefaultView;
DataGrid1.DataBind();
Showstats();
Label1.Text=DataGrid1.Items.Count.ToString();
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
BindGrid();
Label1.Text=DataGrid1.Items.Count.ToString();
}
private void Showstats()
{
lblCurrentIndex.Text="第"+(DataGrid1.CurrentPageIndex+1).ToString()+"页";
lblPagecount.Text="总共"+DataGrid1.PageCount.ToString()+"页";
}
private void Button1_Click(object sender, System.EventArgs e)
{
SqlConnection conn=new SqlConnection(path);
conn.Open();
//假设所选部门为所有部门
if(Drp_dep.SelectedItem.Value.Trim().ToString()=="所有部门")
{
//假设所选部门为所有部门,姓名为空的条件下
if(human_name.Text.Trim().ToString()=="")
{
string strsql="select id,name,sex,birthday=convert(char(11),birthday,111),age,mingzhu,xueli,xueli,marrige,prolitics,sfzid,jiguan,jrbdwsj,gzlb,depment,zhiwu,school,specialy,finishtime=convert(char(11),finishtime,111),tel from db_human";
SqlCommand cmd=new SqlCommand(strsql,conn);
cmd.CommandType=CommandType.Text;
SqlDataAdapter dap = new SqlDataAdapter();
DataSet ds=new DataSet();
dap.SelectCommand = cmd;
dap.Fill(ds);
DataGrid1.DataSource = ds.Tables[0].DefaultView;
DataGrid1.DataBind();
Showstats();
Label1.Text=ds.Tables[0].Rows.Count.ToString();
}
//假设所选部门为所有部门,但姓名不为空的条件下
else
{
string strname=human_name.Text.Trim().ToString();
string strsql_sybm_havename="select id,name,sex,birthday=convert(char(11),birthday,111),age,mingzhu,xueli,xueli,marrige,prolitics,sfzid,jiguan,jrbdwsj,gzlb,depment,zhiwu,school,specialy,finishtime=convert(char(11),finishtime,111),tel from db_human where name=" + "'" +strname+"'";
SqlCommand cmd1=new SqlCommand(strsql_sybm_havename,conn); cmd1.CommandType=CommandType.Text;
SqlDataAdapter adp=new SqlDataAdapter();
DataSet ds=new DataSet();
adp.SelectCommand=cmd1;
adp.Fill(ds);
DataGrid1.DataSource=ds.Tables[0].DefaultView;
//省略判断语句,查到数据库中有记录,并显示
DataGrid1.DataBind();
Showstats();
Label1.Text=ds.Tables[0].Rows.Count.ToString();
}

}

}
//所选部门不为所有部门的处理
else
{
//所选部门不为所有部门,所有人员信息
if(human_name.Text.Trim().ToString()=="")
{
string depname=Drp_dep.SelectedItem.Value.Trim().ToString();
string strsql_depname="select id,name,sex,birthday=convert(char(11),birthday,111),age,mingzhu,xueli,xueli,marrige,prolitics,sfzid,jiguan,jrbdwsj,gzlb,depment,zhiwu,school,specialy,finishtime=convert(char(11),finishtime,111),tel from db_human where depment=" + "'"+depname+"'";
SqlCommand cmd2=new SqlCommand(strsql_depname,conn);
cmd2.CommandType=CommandType.Text;
SqlDataAdapter dap = new SqlDataAdapter();
DataSet ds=new DataSet();
dap.SelectCommand = cmd2;
dap.Fill(ds);
DataGrid1.DataSource = ds.Tables[0].DefaultView;
DataGrid1.DataBind();
Showstats();
Label1.Text=ds.Tables[0].Rows.Count.ToString();
}
//所选部门不为所有部门,显示按姓名搜索结果
else
{
string depname=Drp_dep.SelectedItem.Value.Trim().ToString();
string strname=human_name.Text.Trim().ToString();
string strsql_depname_name="select id,name,sex,birthday=convert(char(11),birthday,111),age,mingzhu,xueli,xueli,marrige,prolitics,sfzid,jiguan,jrbdwsj,gzlb,depment,zhiwu,school,specialy,finishtime=convert(char(11),finishtime,111),tel from db_human where depment=" + "'"+depname+"'"+" "+"and"+" "+"name="+"'"+strname+"'";
SqlCommand cmd3=new SqlCommand(strsql_depname_name,conn); cmd3.CommandType=CommandType.Text;
SqlDataAdapter dap3 = new SqlDataAdapter();
DataSet ds=new DataSet();
dap3.SelectCommand = cmd3;
dap3.Fill(ds);
... 省略判断......
DataGrid1.DataSource = ds.Tables[0].DefaultView;
DataGrid1.DataBind();
Showstats();
Label1.Text=ds.Tables[0].Rows.Count.ToString();
}}}}}}
...全文
190 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenshibo99 2004-11-05
  • 打赏
  • 举报
回复
我也不会,顶一下
polley0927 2004-11-02
  • 打赏
  • 举报
回复
应该是绑定出错了,检查一下sql语句
tiger200000000 2004-11-02
  • 打赏
  • 举报
回复
string sql难道不行????不用那么复杂吧
homesos 2004-11-02
  • 打赏
  • 举报
回复
用一个全静态成员变量可以解决
homesos 2004-11-02
  • 打赏
  • 举报
回复
绑定有问题
用一个变量存储SQL语句(你上次用过的SQL语句,绑定的数据每变一次,SQL也随着改变)
然后在需要绑定时,用这个SQL语句绑定不就可以了吗
tiger200000000 2004-11-02
  • 打赏
  • 举报
回复
我倒,为什么数据绑定要绑定整个表的信息?比如:我有两个查询条件日期,部门
我可以在初始绑定datagrid时就附带这两个条件
控制在sql语句里。比如日期输入的是txtTime,部门名称:txtDepart.
写sql语句的时候可以:string sql="select * from 表名"
if(txtTime.text.toString() !="")
{
sql=" and dateTime(时间字段)='"+txtTime.text.toString()+"'";
}.......
shinji329 2004-10-30
  • 打赏
  • 举报
回复
不用想,肯定是你的绑定有问题
rybgroup 2004-10-30
  • 打赏
  • 举报
回复
具体怎么做?
shoutor 2004-10-30
  • 打赏
  • 举报
回复
你得把你的搜索参数往下传递啊
zjjszw 2004-10-30
  • 打赏
  • 举报
回复
把搜索Button下面的代碼照原樣寫到
DataGrid1.CurrentPageIndex = e.NewPageIndex;
下面試試
tiger200000000 2004-10-30
  • 打赏
  • 举报
回复
把DataGrid绑定得函数与别得比如说dropdownlist得数据绑定分开。
tiger200000000 2004-10-30
  • 打赏
  • 举报
回复
代码好长,看不下去了。简单得做法。建一个函数比如
DataBindPage(){根据查询条件去检索数据库提取对应得记录;}

将该函数放在pageload中if(!Page.IsPostBack){ DataBindPage();}

你得查询按钮也只要执行{ DataBindPage();} 就一句话。

注意一点:DataBindPage()函数中得sql语句直接用到查询条件。空就忽略那个条件。都空则全选
wh0426ok 2004-10-30
  • 打赏
  • 举报
回复
sp_showhumanlist存储过程是查询整个表的信息,如果要对搜索的结果分页,那么存储过程的功能应该是按部门名查询得到的结果。
BindGrid()函数只是绑定整个表的相关信息,并不是部分查询的信息。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧