【发布时间】:2021-03-09 22:49:43
【问题描述】:
我有一个DataGridView,我绑定了一个DataTable。假设有两列。其中一个是文本列,另一个是文本列,但实际上应该是 ComboBox 列。目前,显示数据的代码是这样的:
DataTable usersTable = new DataTable("Users");
usersTable.Columns.Clear();
usersTable.Rows.Clear();
usersTable.Columns.Add("Username", typeof(string)); // this column is fine
usersTable.Columns.Add("User type", typeof(string)); // this column should be a ComboBox of available user types
// load the data
foreach (User u in users)
{
usersTable.Rows.Add(u.username);
usersTable.Rows.Add(u.usertype); // assume the database has user types of only "Admin" and "Normal"
}
// bind the data
usersDataGridView.DataSource = usersTable;
我希望DataGridView 有一个"User type" 的列,其中包含两个可用用户类型的组合框。我怎样才能做到这一点?
【问题讨论】:
-
您需要创建一个新的
DataGridViewComboBoxColumn。将其设置为DataPropertyName以与表中的列名...“用户类型”相匹配。然后为所有“不同”“用户类型”创建一个单独的集合(表或列表),没有重复(管理员和普通等)。然后将该集合用作DataSource到DataGridViewComboBoxColumn。然后将该列添加到网格中,然后添加网格数据源。 -
您最可能遇到的问题是,当您将数据源添加到网格时,组合框列可能会抛出网格
DataError。为了提供帮助,您需要确保数据中的所有“用户类型”都与DataGridViewComboBoxColumns项目集合中的用户类型之一匹配。如果没有这项检查,您将熟悉可怕的网格DataError。 -
@JohnG 你能以 sn-p 代码为例将其发布为答案吗?
标签: c# .net winforms datatable datagridview