GridView的排序不工作 [英] sort Gridview doesn't work

查看:128
本文介绍了GridView的排序不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有asp.net页面包含的GridView如下

 < ASP:GridView控件ID =GridView1=服务器AllowPaging =真
                    OnPageIndexChanging =gridView_PageIndexChanging
                    OnSorting =TaskGridView_Sorting
                    AllowSorting =真的AutoGenerateColumns =FALSE
                    onselectedindexchanged =GridView1_SelectedIndexChanged
                    背景色=#DEBA84BORDERCOLOR =#DEBA84边框=无边框宽度=1像素
                    CELLPADDING =3CELLSPACING =2>
                    < RowStyle的BackColor =#FFF7E7前景色=#8C4510/>
                    <柱体和GT;
                      < ASP:BoundField的数据字段=name_englishconvertemptystringtonull =真HEADERTEXT =名称/>
                        < ASP:BoundField的数据字段=Inc_IDconvertemptystringtonull =真的HeaderText =Inc_IDSORTEX pression =Inc_ID/>
                        < ASP:BoundField的数据字段=UID的HeaderText =Study_UIDSORTEX pression =UID/>
                    < /专栏>
                    < FooterStyle背景色=#F7DFB5前景色=#8C4510/>
                    < PagerStyle前景色=#8C4510Horizo​​ntalAlign =中心/>
                    < SelectedRowStyle背景色=#738A9CFONT-粗体=真前景色=白/>
                    < HeaderStyle背景色=#A55129FONT-粗体=真前景色=白/>
                < / ASP:GridView的>

我填写,并使用以下code的顺序来排序

 保护无效的button1_Click(对象发件人,EventArgs的发送)
        {
            //连接数据库
            字符串连接= System.Configuration.ConfigurationManager.ConnectionStrings[\"NorthindConnectionString\"].ConnectionString;
            的SqlConnection的myconn =新的SqlConnection(连接);
            myConn.Open();
            CMD的SqlCommand =新的SqlCommand(工作表的myconn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(新的SqlParameter(@名,TextBox1.Text));
            cmd.Parameters.Add(新的SqlParameter(@ ID中,TextBox2.Text));
            cmd.Parameters.Add(新的SqlParameter(@ ACCNO,TextBox4.Text));
            SqlDataAdapter的大=新SqlDataAdapter的(CMD);
            DataSet的DS =新的DataSet();
            da.Fill(DS);
            GridView1.DataSource = DS;
            GridView1.DataBind();            会话[TaskTable] = ds.Tables [0];            ds.Dispose();
            da.Dispose();
            GridView1.Visible = TRUE;            myConn.Close();
        }
 保护无效TaskGridView_Sorting(对象发件人,GridViewSortEventArgs E)
        {            //从session对象检索表。
            DataTable的DT =会话[TaskTable]作为数据表;            如果(DT!= NULL)
            {                //排序的数据。
                dt.DefaultView.Sort = e.SortEx pression ++ GetSortDirection(e.SortEx pression);
                GridView1.DataSource =会话[TaskTable];
                GridView1.DataBind();
            }        }        私人字符串GetSortDirection(字符串列)
        {            //默认情况下,设置排序方向上升。
            字符串sortDirection =ASC;            //检索进行了排序最后一列。
            字符串SORTEX pression =的ViewState [SORTEX pression]作为字符串;            如果(SORTEX pression!= NULL)
            {
                //检查同一列进行排序。
                //否则,可以返回默认值。
                如果(SORTEX pression ==列)
                {
                    字符串lastDirection =的ViewState [SortDirection]作为字符串;
                    如果((lastDirection = NULL)及!及(lastDirection ==ASC))
                    {
                        sortDirection =DESC;
                    }
                }
            }            //在ViewState中保存新值。
            的ViewState [SortDirection] = sortDirection;
            的ViewState [SORTEX pression] =列;            返回sortDirection;
        }
    }

问题的时候点击任何头进行排序引发错误System.IndexOutOfRangeException:无法找到列名..,任何想法来解决这个问题,我是从列名在数据库中,

确定
解决方案

 私人字符串ConvertSortDirectionToSql(SortDirection sortDirection)
    {
        字符串newSortDirection =的String.Empty;        开关(sortDirection)
        {
            案例SortDirection.Ascending:
                newSortDirection =ASC;
                打破;            案例SortDirection.Descending:
                newSortDirection =DESC;
                打破;
        }        返回newSortDirection;
    }
    保护无效gridView_Sorting(对象发件人,GridViewSortEventArgs E)
    {
        DataTable中的dataTable = gridView.DataSource的数据表;        如果(dataTable的!= NULL)
        {
            数据视图数据视图=新的数据视图(dataTable的);
            dataView.Sort = e.SortEx pression ++ ConvertSortDirectionToSql(e.SortDirection);            gridView.DataSource =数据视图;
            gridView.DataBind();
        }
    }

试试这个code ..

I have asp.net page contain gridview as following

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
                    OnPageIndexChanging="gridView_PageIndexChanging" 
                    OnSorting="TaskGridView_Sorting"
                    AllowSorting="True"  AutoGenerateColumns="False" 
                    onselectedindexchanged="GridView1_SelectedIndexChanged" 
                    BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" 
                    CellPadding="3" CellSpacing="2">
                    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
                    <Columns>
                      <asp:boundfield datafield="name_english" convertemptystringtonull="true" headertext="Name"/>
                        <asp:BoundField DataField="Inc_ID" convertemptystringtonull="true" HeaderText="Inc_ID" SortExpression="Inc_ID"/>
                        <asp:BoundField DataField="UID" HeaderText="Study_UID" SortExpression= "UID"/>
                    </Columns>
                    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
                    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
                </asp:GridView>

I fill and sort it using the following code

        protected void Button1_Click(object sender, EventArgs e)
        {
            //connection to database 
            string connection = System.Configuration.ConfigurationManager.ConnectionStrings["NorthindConnectionString"].ConnectionString;
            SqlConnection myConn = new SqlConnection(connection);
            myConn.Open();
            SqlCommand cmd = new SqlCommand(" WorkList", myConn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Name", TextBox1.Text));
            cmd.Parameters.Add(new SqlParameter("@ID", TextBox2.Text)); 
            cmd.Parameters.Add(new SqlParameter("@AccNo", TextBox4.Text)); 


            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            GridView1.DataSource = ds;
            GridView1.DataBind();

            Session["TaskTable"] = ds.Tables[0]; 

            ds.Dispose();
            da.Dispose();
            GridView1.Visible = true;

            myConn.Close();


        }
 protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
        {

            //Retrieve the table from the session object.
            DataTable dt = Session["TaskTable"] as DataTable;

            if (dt != null)
            {

                //Sort the data.
                dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
                GridView1.DataSource = Session["TaskTable"];
                GridView1.DataBind();
            }

        }



        private string GetSortDirection(string column)
        {

            // By default, set the sort direction to ascending.
            string sortDirection = "ASC";

            // Retrieve the last column that was sorted.
            string sortExpression = ViewState["SortExpression"] as string;

            if (sortExpression != null)
            {
                // Check if the same column is being sorted.
                // Otherwise, the default value can be returned.
                if (sortExpression == column)
                {
                    string lastDirection = ViewState["SortDirection"] as string;
                    if ((lastDirection != null) && (lastDirection == "ASC"))
                    {
                        sortDirection = "DESC";
                    }
                }
            }

            // Save new values in ViewState.
            ViewState["SortDirection"] = sortDirection;
            ViewState["SortExpression"] = column;

            return sortDirection;
        }


    }

the problem when click on any header for sorting raise error System.IndexOutOfRangeException: Cannot find column name .. , any idea to solve that , I am sure from the columns name in database ,

解决方案

private string ConvertSortDirectionToSql(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;

        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;

            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }

        return newSortDirection;
    }


    protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = gridView.DataSource as DataTable;

        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);

            gridView.DataSource = dataView;
            gridView.DataBind();
        }
    }

try this code..

这篇关于GridView的排序不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆