日期:2014-05-17  浏览次数:20469 次

GridView空值排序,哪位大手帮忙看看?
GridView点击列名排序,如果这一列有空值,要求不管是升序还是降序,含有空值的行始终排在最后。(实际情况是:如果按照升序排序,空值行是排在最前面的)

排序事件
C# code

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sPage = e.SortExpression;
        if (ViewState["SortOrder"].ToString() == sPage)
        {
            if (ViewState["OrderDire"].ToString() == "Desc")
                ViewState["OrderDire"] = "ASC";
            else
                ViewState["OrderDire"] = "Desc";
        }
      
        else
        {
            ViewState["SortOrder"] = e.SortExpression;
        }
        BindGridView();
    }

页面载入事件
C# code

protected void Page_Load(object sender, EventArgs e)
    {

        if (ViewState["ddl"] != null)
        {
            DropDownList1.SelectedValue = ViewState["ddl"].ToString();
        }
        if (!Page.IsPostBack)
        {
            ViewState["SortOrder"] = "ProductId";
            ViewState["OrderDire"] = "ASC";
            ViewState["sql"] = sql;
            BindGridView();
        }

    }


数据绑定函数
C# code

public void BindGridView()
    {
        sql = ViewState["sql"].ToString();
        SqlConnection con = new SqlConnection(str);
        try
        {
            con.Open();
            SqlDataAdapter ad = new SqlDataAdapter(sql, con);
            DataSet ds = new DataSet();
            ad.Fill(ds, "Product");
            DataView dv = ds.Tables["Product"].DefaultView;
            string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
            dv.Sort = sort;
            GridView1.DataSource = dv;
            GridView1.DataBind();

        }
        catch (Exception e)
        {
            Page.RegisterStartupScript("show", "<script>alert('Error" + e.Message + "')</script>");
        }
        finally
        {
            con.Close();
        }

    }




------解决方案--------------------
你可以这样,取出两个数据集,一个是非空的,一个全空的,排序时对非空的进行排序,然后将全空的追加进去,形成 一个新数据集,然后绑定
------解决方案--------------------
不是很确定,把所有的空值替换成"\uf000",一般而言,它自然就排到最后去了。
------解决方案--------------------
写两条取值sql语句(一条取不为空的,另外是空的) 一起执行 用dataset返回 然后 对不为空的进行排序 之后再合成一个数据集
------解决方案--------------------
分个组,一个为空一个不为空,只对不为空的数据进行排序,然后将为空的数据追加到排序后的结果上去。