C# DataGridView(部分)数据绑定自定义排序

C# DataGridView(部分)数据绑定自定义排序,c#,sorting,datagridview,C#,Sorting,Datagridview,我有一个数据网格,我必须用混合的 使用代码动态创建的列 从查询中检索数据的列(动态、自然) 数据表 using (SqlDataReader dr = cmd.ExecuteReader()) { table.Load(dr); // Insert row number column DataGridViewTextBoxColumn rowColumn = new DataGridViewTextBoxColumn() { HeaderTe

我有一个数据网格,我必须用混合的

  • 使用代码动态创建的列
  • 从查询中检索数据的列(动态、自然)
数据表

using (SqlDataReader dr = cmd.ExecuteReader())
{
    table.Load(dr);

    // Insert row number column
    DataGridViewTextBoxColumn rowColumn = new DataGridViewTextBoxColumn()
    {
        HeaderText = "Row",
        Width = 40,
        ReadOnly = true,
        Frozen = true
    };
    dgv.Columns.Insert(0, rowColumn);

    // Insert grouping column
    DataGridViewComboBoxColumn groupColumn = new DataGridViewComboBoxColumn()
    {
        HeaderText = "Grouping",
        Width = 70,
        DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox,
        FlatStyle = System.Windows.Forms.FlatStyle.Flat,
        Frozen = true
    };
    groupColumn.Items.AddRange(new object[] { "-", "Group 1", "Group 2"});
    dgv.Columns.Insert(1, groupColumn);

    // Populate row & grouping columns
    .................

    dgv.DataSource = table;
}   
DataGridView充满了所需的数据,用户可以更改他想要的任何内容。
最后,我需要根据已编辑值(包括已创建值和数据绑定值)的列的修改内容对行进行排序:我如何做到这一点

无法使用Sort()对数据绑定的DataGridView进行排序,也不能使用DataTable的排序方法(或可以放在中间的DataView),因为我有额外的数据。

我被这个问题困扰了…

在表中添加列,而不是在datagridview中添加列。 这将使列数据绑定,而不是“手动”创建。 然后,要将该列转换为组合框列,请查看此SO链接:

那么为什么不将列添加到表中而不是datagridview中呢?因此,当您绑定表时,您将获得额外的列。如果您迫切需要一个下拉列,只需在数据绑定后转换该列即可。@WozzeC:谢谢您的建议,我正在尝试重构我的代码,并且部分工作正常。如何将表列转换为
DataGridViewComboBoxColumn
?不幸的是我需要。。。看看这个。@WozzeC:我在那里看到了你的答案,但该列是由代码生成的(和我的一样),不能用于排序!!您知道如何将DataGridViewTextColumn(从DataTable加载数据时自动生成)“转换”为DataGridViewComboxColumn,而无需删除并重新创建它吗?该示例中没有创建任何列?它在以前是文本框的位置创建一个单元格。您只需执行循环并替换该列的所有单元格。您的列仍然应该是数据绑定的,因为它是与datatable一起添加的。你只是改变了改变它的方式。然而,我现在没有可能测试这个,所以我可能在这个问题上是错的。