积极答复者
在cs文件里的linq查询绑定到GridView 分页出错

问题
-
因为查询时动态的,我写在cs文件里面:
using (DataClassesDataContext myData = new DataClassesDataContext())
{
var allSearch = from comcas in myData.CompanyProduct
where comcas.id == qname
select new
{
LCompanyInfoId = comcas.LCompanyInfoId};
GridView1.DataSource = allSearch;
GridView1.DataBind();
}
GridView1 不能分页就错误,还有排序就错误
GridView“GridView1”激发了未处理的事件“PageIndexChanging”
请给与帮助。- 已移动 孟宪会Moderator 2009年5月31日 12:31 ([Loc]From:.NET Framework 一般性问题讨论区)
答案
-
haha ,这样不可以,因为 where comcas.id == qname 是动态的根据递交的不同,而查询的不同。
用这种方法就可以了:
public partial class research : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string qname = Request.Form["qname"];
this.ViewState["sql"] = qname;
}
string qname2 = this.ViewState["sql"].ToString();
using (DataClassesDataContext myData = new DataClassesDataContext())
{
var allSearch = from review in myData.Customers
where review.CompanyName.Contains(qname2)
select review;
GridView1.DataSource = allSearch;
GridView1.DataBind();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
}
用ViewState记住返回的数据,否则下一页后会报递交的数据为空 ViewState记住返回的就可以了。- 已标记为答案 KeFang Chen 2009年6月5日 7:13
全部回复
-
你好, 未定义 PageIndexChanging 事件, 需要给 GridView 添加 PageIndexChanging 事件, 参考
知识改变命运,奋斗成就人生! -
在手动给Gridview邦定数据源时(不是前台利用DataSource控件绑定),会出现这种情况:
运行后直接显示分页的1,只有1显示正常,如果点选其它的,比如2或者4什么其它别的,提示:
GridView“XXX”激发了未处理的事件“PageIndexChanging”。手动分页必须有PageIndexChanging事件,添加PageIndexChanging事件,然后添加如下代码:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.DataSource = BindData();
this.GridView1.DataBind();
}
但是有问题啊,
我得不到中的allSearch啊
using (DataClassesDataContext myData = new DataClassesDataContext())
{
var allSearch = from comcas in myData.CompanyProduct
where comcas.id == qname
select new
{
LCompanyInfoId = comcas.LCompanyInfoId};
GridView1.DataSource = allSearch;
GridView1.DataBind();
} -
这样试试protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){this.GridView1.PageIndex = e.NewPageIndex;using (DataClassesDataContext myData = new DataClassesDataContext()){var allSearch = from comcas in myData.CompanyProductwhere comcas.id == qnameselect new{LCompanyInfoId = comcas.LCompanyInfoId};GridView1.DataSource = allSearch;GridView1.DataBind();}}
知识改变命运,奋斗成就人生! -
haha ,这样不可以,因为 where comcas.id == qname 是动态的根据递交的不同,而查询的不同。
用这种方法就可以了:
public partial class research : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string qname = Request.Form["qname"];
this.ViewState["sql"] = qname;
}
string qname2 = this.ViewState["sql"].ToString();
using (DataClassesDataContext myData = new DataClassesDataContext())
{
var allSearch = from review in myData.Customers
where review.CompanyName.Contains(qname2)
select review;
GridView1.DataSource = allSearch;
GridView1.DataBind();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
}
用ViewState记住返回的数据,否则下一页后会报递交的数据为空 ViewState记住返回的就可以了。- 已标记为答案 KeFang Chen 2009年6月5日 7:13