按列名对GridView进行排序

时间:2016-01-23 16:20:15

标签: c# wpf sorting listview

我正在创建View并将其分配给ListView的ListView属性。 ItemsSource的{​​{1}}绑定到ObservableCollection<Entry>Entry是我的MVVM应用程序中的模型,它包含List<KeyValuePair<string,string>>。它还有一个索引器,它从索引器参数中获取第一个KeyValurPair<string,string>的{​​{1}}属性(从列表中)。所以它就像一本字典。

现在我正在制作GridView。

Value

foreach (Column column in category.Columns.Where(c => c.IsVisibleInTable)) { var gridViewColumn = new GridViewColumn { Header = column.Name, DisplayMemberBinding = new Binding($"[{column.Name}].Value") }; gridView.Columns.Add(gridViewColumn); } 也是一个模型,但这并不重要。

现在我想告诉GridView根据第一列进行排序。但我无法使用Column的DefaultView并向其添加ItemsSource因为SortDescription需要一个属性名称,而我没有绑定到属性名称而是绑定到索引器。
那么如何根据第二列进行排序呢?

1 个答案:

答案 0 :(得分:0)

这里是排序算法

iN gridview传递这两个参数aspx AllowSorting="true" OnSorting="OnSorting"

private string SortDirection { get { return ViewState["SortDirection"] != null ? ViewState["SortDirection"].ToString() : "ASC"; } set { ViewState["SortDirection"] = value; } } protected void OnSorting(object sender, GridViewSortEventArgs e) { this.BindGrid(e.SortExpression); }

在这里我们必须放置代码 `private void BindGrid(字符串sortExpression = null) { conn.Open();

        SqlCommand cmd = new SqlCommand("SELECT * from [test].[dbo].[myform] order by name", conn);
        SqlDataAdapter sda = new SqlDataAdapter();

        cmd.Connection = conn;
        sda.SelectCommand = cmd;
        using (DataTable dt = new DataTable())
        {
            sda.Fill(dt);
            if (sortExpression != null)
            {
                DataView dv = dt.AsDataView();
                this.SortDirection = this.SortDirection == "ASC" ? "DESC" : "ASC";
                dv.Sort = sortExpression + " " + this.SortDirection;
                GridView2.DataSource = dv;
            }
            else
            {
                GridView2.DataSource = dt;
            }
            GridView2.DataBind();
            conn.Close();

        }

    }`