none
在cs文件里的linq查询绑定到GridView 分页出错 RRS feed

  • 问题

  • 因为查询时动态的,我写在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 不能分页就错误,还有排序就错误
    GridViewGridView1激发了未处理的事件“PageIndexChanging”
    请给与帮助。

    • 已移动 孟宪会Moderator 2009年5月31日 12:31 ([Loc]From:.NET Framework 一般性问题讨论区)
    2009年5月31日 10:14

答案

  • 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记住返回的就可以了。
    2009年6月1日 1:32

全部回复

  • 你的PageIndexChanging事件写的什么?
    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年5月31日 11:16
    版主
  • 你好, 未定义 PageIndexChanging 事件, 需要给 GridView 添加 PageIndexChanging 事件, 参考
    知识改变命运,奋斗成就人生!
    2009年5月31日 11:32
    版主
  • 在手动给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(); 
                          
                       }

    2009年5月31日 15:08
  • 这样试试

       protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GridView1.PageIndex = e.NewPageIndex;
            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();
            }
        }

    知识改变命运,奋斗成就人生!
    2009年5月31日 15:17
    版主
  • 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记住返回的就可以了。
    2009年6月1日 1:32
  • 嗯,这样的方法是可行的,用Session也可以,还有什么问题吗?
    知识改变命运,奋斗成就人生!
    2009年6月1日 1:37
    版主