【发布时间】:2015-06-16 12:40:07
【问题描述】:
场景
我正在用 DataGridViewRow 集合手动填充 DataGridView:
我在设计时在 Visual Studio 的 GUI 构建器中创建了这些列。
- 第一列采用 整数 值,即
DataGridViewTextBoxColumn。 - 第二列采用 Icon 对象,即
DataGridViewImageColumn。 - 第三列采用 String 值,即
DataGridViewTextBoxColumn。 - Fourth 采用 String 值,即
DataGridViewComboBoxColumn。
所以,当我想添加新行时,我会这样做:
Dim dgvr As New DataGridViewRow
With dgvr
.CreateCells(MyDataGridView)
.Cells(0).Value = An Integer value
.Cells(1).Value = An Icon object
.Cells(2).Value = An String value
.Cells(3).Value = An existing ComBoBox item name.
End With
MyDataGridView.Rows.Add(dgvr)
问题
我的意图是遵循良好的编程习惯,然后,为了避免这种与 UI 的交互,我更愿意使用和管理 DataSource,然后我可以如何创建一个DataTable 采用相同类型的值将其设置为控件的DataSource?有可能吗?
如果没有,我能做些什么来管理 DataSource 而不是直接管理控件的行集合?
总的来说,我如何改进我正在做的事情以获得更高的效率?
【问题讨论】:
-
使用正确的
DataTypes为列创建一个DataTable,将您的行添加到DataTable,然后将其设置为.DataSource到表中。 -
而不是 DataTable - 为数据创建 DGVItem 类并使用
List(Of DGVitem)或 BindingList。将它们用作 DGV 数据源。在这种情况下,数据表没有任何优势。请注意,无论你做什么,你都需要重写你的 MoveUp/Dn 方法(我开始在另一个问题上提出这个建议,但是......) -
@Plutonix 我同意无论如何创建一个类。如果您不介意,为什么 DataTable 没有优势,为什么?如果您不介意我问,为什么类和列表比 DataTable 更好?此外,我会亲自使用字典,因此如果需要,我可以轻松更新,使用列表时没有键/值可查看...
-
@436f6465786572,我的意思是 DT 比 List 和 Class 没有优势。 DT 会起作用。你可能不知道的是the other aspect of this。使用 List 比处理 DT、DT.RowsCollection 等要容易得多
-
您的 Up/Dn 代码只需稍作调整即可与 List/Collection 一起正常工作(主要将
rows更改为dgvList)。如果您使用 DT,那么您最终也将不得不将数据片段找出来,无论它们是如何使用的。如果数据来自数据库并返回那里,DT 会很棒(比列表更好),但事实并非如此。
标签: .net vb.net winforms datagridview datatable