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数据绑定