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

Posted

技术标签:

【中文标题】DataGridView(部分)数据绑定自定义排序【英文标题】:DataGridView (partially) databound custom sort 【发布时间】:2012-10-19 13:24:37 【问题描述】:

我有一个数据网格,我必须混合填充

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

DataTable 表格;

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() 对数据绑定的数据网格视图进行排序,也不能使用 DataTable 的 Sort 方法(或者我可以放在中间的 DataView),因为我有额外的数据。 我被这个困住了......

【问题讨论】:

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

在表格中添加列,而不是在 datagridview 中添加。 这将使列数据绑定而不是“手动”创建它。 然后将该列转换为组合框列,请查看此 SO 链接: How to change a datagridview cell style from the default textbox to combobox in vb.net?

【讨论】:

以上是关于DataGridView(部分)数据绑定自定义排序的主要内容,如果未能解决你的问题,请参考以下文章

C# winform datagridview 列顺序的问题?

将数据绑定 DataGridView 上的单元格类型更改为自定义 DataGridViewCell 类型

winform 自定义分页控件 及DataGridview数据绑定

winform中的datagridview的属性Columns中手动添加列后,怎么绑定数据库的数据源,语句怎么写

winform 里datagridview的标题列变黑

对 DataGridView 进行排序后,如何更新数据源以反映 DataGridView 的绑定?