比如我有一个GridView的用户控件里面是自己写的数据库的分页,然后每项前面都有一个选定框。
在分页以后我要记录以前选定的值,有什么方法可以实现的吗?????
各位大虾帮帮忙啦然后我想用户自己能调整GirdView各个列排列的顺序,要怎么弄啊~~~

解决方案 »

  1.   

    在PageIndexChanging事件中,先循环表格获取选中的行,处理后,再执行分页,分页后再做你想做的事情
      

  2.   

    你的分页控件里加一个label控件保存页码这些,排序就写GridView的Sort事件吧.
      

  3.   

    恩,,我是可以循环取出来所选的行,但是要用什么保存比较好呢???分页我是用的数据库的分页,PageIndexChanging事件貌似没用呢。。本来我是想用缓存来保存选定了的项的,但每次各页间跳转的时候都不能取得GridView的数据,这是为什么。。(DataTable)GridView1.DataSource不行吗?各位帮帮忙哈。。  继续加分~~~
      

  4.   

    可以循环取出来所选的行的Key值。使用 缓存来Keep, 需要使用的时候,在去数据库取得
      

  5.   

    可以用缓存啊,在绑定gridview的数据对象里面加个check属性,把check为true的方到session里面去
      

  6.   

    在模板里面放过连接控件写上 顺序,倒序,你起个好听的名字。然后根据取出的数据进行desc asc。大约是这个做法,
    不知道对不对
      

  7.   

    这个我昨晚刚好研究的问题,我把我的代码发给你,自己研究吧!
    先可以从客户端记录checked值: 比如: 
    a.aspx: <script language="javascript" type="text/javascript"> 
    //得到数据 
    var Hnum='<%=UInum%>'; 
    var pagenum='<%=pagenum%>';//记录翻页页码
    var sid=new Array(Hnum);//sid记录数组//UseId  UInum 
    var Hsid=' <%=UseId%>'; 
    sid = Hsid.split(" ¦"); 
    var Ysid=""; 
    function link(str) 

        CheckAll(); 
        if(str == "1") 
        { 
            location.href="a.aspx?sid=" + Ysid + "&pagenum=" +pagenum+ "&is=1"; //有is参数决定怎么样回传
        } 
        else if(str == "0") 
        { 
            location.href="a.aspx?sid=" + Ysid + "&pagenum=" +pagenum+ "&is=0"; 
        } 

    function CheckAll() 

        var inputs=document.getElementsByTagName("input");  
        var isfirst="0";   
        for(var i=0;i    <inputs.length;i++)    
        {    
           if(inputs[i].type=="checkbox")    
           {    
              if(inputs[i].checked)  
              {  
                 if(isfirst=="0") 
                 { 
                    Ysid += inputs[i].value; 
                 } 
                 else 
                 { 
                   Ysid = Ysid + " ¦" + inputs[i].value; 
                 } 
                 isfirst="1"; 
              }   
            }    
         }      

    </script>   
    然后你要记录分页前的页码,这个简单,因为你是自定义分页,可以这样做:
    protected string pagenum;//定义为页码#region GridView1页码跳转
            protected void link_next_Click(object sender, EventArgs e)
            {
                if (GridView1.PageIndex < GridView1.PageCount)
                    GridView1.PageIndex++;
                CheckPager();
                ShowPageIndex();
                GridBind();
            }        protected void linke_pre_Click(object sender, EventArgs e)
            {
                if (GridView1.PageIndex > 0)
                    GridView1.PageIndex--;
                CheckPager();
                ShowPageIndex();
                GridBind();
            }        protected void link_frist_Click(object sender, EventArgs e)
            {
                GridView1.PageIndex = 0;
                CheckPager();
                ShowPageIndex();
                GridBind();
            }        protected void link_last_Click(object sender, EventArgs e)
            {
                GridView1.PageIndex = GridView1.PageCount - 1;
                CheckPager();
                ShowPageIndex();
                GridBind();
            }        protected void img_goto_Click(object sender, ImageClickEventArgs e)
            {
                int page_num = 0;
                if (this.txt_pagenum.Text != string.Empty)
                {
                    try
                    {
                        page_num = Convert.ToInt32(this.txt_pagenum.Text);
                        if (page_num > 0 && page_num <= GridView1.PageCount)
                            this.GridView1.PageIndex = page_num - 1;
                    }
                    catch
                    {
                        page_num = this.GridView1.PageIndex;
                    }
                    CheckPager();
                    ShowPageIndex();
                    GridBind();
                }
            }
            public void ShowPageIndex()
            {
                if (this.GridView1 != null)
                {
                    this.img_goto.Enabled = true;
                    if (this.GridView1.PageCount != 0)
                    {
                        pagenum = Convert.ToString(GridView1.PageIndex + 1);//给参数赋页码值
                        this.lab_pageindex.Text = Convert.ToString(GridView1.PageIndex + 1) + "/" + this.GridView1.PageCount.ToString();
                        this.img_goto.Enabled = true;
                    }
                    else
                    {
                        pagenum = Convert.ToString(GridView1.PageIndex + 1);//给参数赋页码值
                        this.lab_pageindex.Text = Convert.ToString(GridView1.PageIndex) + "/" + this.GridView1.PageCount.ToString();
                        this.img_goto.Enabled = false;
                    }                //this.txt_pagenum.Text = Convert.ToString(GridView1.PageIndex + 1);
                    CheckPager();
                }
                else
                {
                    this.lab_pageindex.Text = "0/0";
                    this.img_goto.Enabled = false;
                    this.link_frist.Enabled = false;
                    this.linke_pre.Enabled = false;
                    this.link_next.Enabled = false;
                    this.link_last.Enabled = false;
                    this.img_goto.Enabled = false;
                }
            }
            private void CheckPager()
            {
                if (GridView1.PageIndex <= 0)
                {
                    this.link_frist.Enabled = false;
                    this.linke_pre.Enabled = false;
                }
                else
                {
                    this.link_frist.Enabled = true;
                    this.linke_pre.Enabled = true;
                }
                if (GridView1.PageIndex >= GridView1.PageCount - 1)
                {
                    this.link_next.Enabled = false;
                    this.link_last.Enabled = false;
                }
                else
                {
                    this.link_next.Enabled = true;
                    this.link_last.Enabled = true;
                }
            }
            #endregion
     
    a.aspx.cs: 
    [code=HTML]
      

  8.   

    续前面:
    a.aspx.cs:  protected string pagenum = "0";//页码数
    protected string UserSid = "";//用户sid
    protected string UserIs = "";
    protected void Page_Load(object sender, EventArgs e)
            {            try
                {
                    UserSid = Request.QueryString["sid"].ToString();
                    pagenum = Request.QueryString["pagenum"].ToString();
                    UserIs = Request.QueryString["is"].ToString();
                }
                catch
                {
                    UserSid = "";
                    pagenum = "0";
                    UserIs = "";
                }            if (!IsPostBack)
                {
                    string strcom = "select * from CompanyDet";
                    string strrol = "select UserInfo.USERID,Roles.ROLENAME from UserInfo,USER2ROLE,Roles where UserInfo.USERID = USER2ROLE.USERID and USER2ROLE.ROLEID = Roles.ROLEID";
                    ConnectDDList(strcom, "COMNAME", "SID", this.ddlcompany);
                    ConnectDDList(strrol, "ROLENAME", "USERID", this.ddltype);
                    GridView1.DataKeyNames = new string[] { "SID" };
                    GridBind();
                    ShowPageIndex();
                    CheckPager();
                    if ((Convert.ToInt32(pagenum) != 0) && (UserNum.Equals("all")))
                    {
                        GridBind();
                        if (UserSid != "")
                        {
                            USID = UserSid.Split(new char[1] { '|' });
                            if (UserIs.Equals("1"))
                            {
                                for (int i = 0; i < USID.Length; i++)
                                {
                                    string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(USID[i]);
                                    DataCom(sql);
                                }
                            }
                            else if (UserIs.Equals("0"))
                            {
                                for (int i = 0; i < USID.Length; i++)
                                {
                                    string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(USID[i]);
                                    DataCom(sql);
                                }
                            }
                            this.txt_pagenum.Text = pagenum;
                            int page_num = 0;
                            if (this.txt_pagenum.Text != string.Empty)
                            {
                                try
                                {
                                    page_num = Convert.ToInt32(this.txt_pagenum.Text);
                                    if (page_num > 0 && page_num <= GridView1.PageCount)
                                        this.GridView1.PageIndex = page_num - 1;
                                }
                                catch
                                {
                                    page_num = this.GridView1.PageIndex;
                                }
                                CheckPager();
                                ShowPageIndex();
                                GridBind();
                                this.txt_pagenum.Text = "";
                            }
                        }
                        else
                        {
                            ShowPageIndex();
                            CheckPager();
                        }
                    }
                    else if ((Convert.ToInt32(pagenum) != 0) && (UserNum.Equals("one")))
                    {
                        GridBind();
                        if (UserSid != "")
                        {
                            if (UserIs.Equals("1"))
                            {
                                string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(UserSid);
                                DataCom(sql);
                            }
                            else if (UserIs.Equals("0"))
                            {
                                string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(UserSid);
                                DataCom(sql);
                            }
                            this.txt_pagenum.Text = pagenum;
                            int page_num = 0;
                            if (this.txt_pagenum.Text != string.Empty)
                            {
                                try
                                {
                                    page_num = Convert.ToInt32(this.txt_pagenum.Text);
                                    if (page_num > 0 && page_num <= GridView1.PageCount)
                                        this.GridView1.PageIndex = page_num - 1;
                                }
                                catch
                                {
                                    page_num = this.GridView1.PageIndex;
                                }
                                CheckPager();
                                ShowPageIndex();
                                GridBind();
                                this.txt_pagenum.Text = "";
                            }
                        }
                        else
                        {
                            ShowPageIndex();
                            CheckPager();
                        }
                    }
                    else
                    {
                        GridBind();
                        ShowPageIndex();
                        CheckPager();
                    }
                }
            }这样就解决了!下面pageload事件我自己程序里的,所以没怎么改,不过思路在这!
      

  9.   

    我现在是用缓存来记录被选定的行,这个已经实现了。但出现一个大问题就是我现在用的用户控件,实现了分页的话GRIDVIEW自带的功能很多就没有了。所以我现在是想写个自定义控件,要能实现存储过程分页和记录选定项的自定义控件,从GridView继承过来,现在主要是不太清楚要覆盖哪几个函数才能实现。。GridView的PageCount是只读的,我有什么办法让自定义控件中页面跳转的时候让他自动进行数据库分页吗????现在主要是我要分开写的话,GridView不能知道一共有多少页,,,因为不能指定。。各位大虾上哈~~~~
      

  10.   

    1.在GridView1_PageIndexChanging事件中记录选中行//遍历GridView1
    foreach (GridViewRow row in GridView1)
             {
                 //获取GridView1行中的CheckBox控件
                 CheckBox chk = (CheckBox)row.Cells["CheckBox控件所在列索引"].FindControl("chkBox");
                 if (chk.Checked)
                 {
                     //记录选中行
                 }
             }2.使用DataView对各列进行排序//获取原始数据 
     DataSet ds = GetMyData(); 
     DataView dv =ds.Tables[0].DefaultView; 
    //按ID降序排列 
     dv.Sort = "order by id desc"; 
      

  11.   

    你现在的问题是和gridview没有一点关系;你现在只是用它来显示数据,对吧;其他的都是自己做的,对不;
    你可以把dataset缓存起来,作为一个数据源来实现你要的那些功能;
    使用viewstate存储ds,currentpagenum;prepagenum ;nextpagenum;然后再ds.tables[""].defaultview使用条件过滤;使用sort调整顺序;
    你没有必要重写的,
      

  12.   

    我以前也是用的缓存,把信息放入ViewState
      

  13.   

    参考:
    http://dotnet.aspx.cc/ShowDetail.aspx?id=F43AF9A5-2C2E-4AA6-E976-21E9569F5A8A
      

  14.   

    感觉还是没有得到太满意的答案,跨页多选是比较容易实现,主要是要写成自定义控件的形式,在不损失GRIDVIEW自带功能的前提下,实现存储过程分页和跨页多选。。谁做过相关的没??谢谢啦不管怎么样,回复超过50楼就结贴了。
      

  15.   

    在不损失GRIDVIEW自带功能的前提下
    ----------------------------------------
    不可能损失的~
      

  16.   

        protected void Filter()
        { 
         //在这个方法中把选中的记录下来
         //   然后调用
            Bind();
        }
        protected void SetDS()
        { 
        /**************
         * 这个方法是从数据
         * 库中取出需要的纪录
         * 这个应该很简单的 
         * ***********/
        }
        DataSet DataSourceds ;
        DataSet Bdds;
        int CurrentPageNum;
        int PageSize=15;
        int RecordSize;
        protected void CreatDataSet()
        {
            DataSourceds = Cache.Get("Source");
            if (DataSourceds == null)
            {
                DataSourceds = SetDS();//这个是使用数据库填充ds然后保存到cache中
                Cache.Insert("Source", DataSourceds);
            }
            RecordSize = DataSourceds.Tables[0].Rows.Count;
        }
        
        protected DataSet Page()
        {
            CreatDataSet();
            int StartNum = PageSize * CurrentPageNum + 1;
            int EndNum = StartNum + 15;
            if (RecordSize < EndNum)
            {
                EndNum = RecordSize;
            }
            Bdds.Tables.Clear();
            for (int i = StartNum; i < EndNum ; i++)
            {
                Bdds.Tables[0].ImportRow(DataSourceds.Tables[0].Rows[i]);
            }
            return Bdds;
        }
        protected void Bind()
        {
            DataSet ds = Page();
            ds.Tables[0].DefaultView.Sort = "";//填写排序的列名 和asc desc
            this.GridView1.DataSource = ds.Tables[0].DefaultView;
            this.GridView1.DataBind();
        }