我已经加载了一个名为dgvPrint
的DataGridView,其中包含一个List,它从数据库中检索如下:
dgvPrint.DataSource = ReservedServices.GetAll();
结果如下:
Worker
列和ServiceType
列是一些整数,它们引用两个表的主键。
如何将ServiceType
和Worker
的列类型从简单文本更改为DataGridViewComboBoxColumn
?
注1:这两列的当前值是相应ComboBox的ValueMember
。
注2:我想保留其他列的数据和位置。
我已将此代码用于Worker
列,但它无法正常运行:
DataGridViewComboBoxColumn colbox;
colbox = (DataGridViewComboBoxColumn)dgvPrintServices.Columns[4];
colbox.DataSource = WorkerServices.GetAll(); // a list of worker with Id and Name
colbox.DisplayMember = "Name";
colbox.ValueMember = "Id";
dgvPrint.Columns.Add(colbox);
答案 0 :(得分:0)
您必须首先定义并向DataGridView添加列(使用VS中的GUI或按照示例下的代码),设置正确的.DataPropertyName。其中一列将是Worker列,它还将包含额外的代码,即您在帖子中列出的代码。然后然后添加数据源。
换句话说,我认为您的代码是正确的,但是分配数据源和设置列属性的顺序必须改变。
VB.NET:
With WIcol4
.Width = "120"
.HeaderText = "Worker"
.DataPropertyName = "Worker"
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
.DefaultCellStyle.Padding = New Padding(0, 0, 6, 0)
.DropDownWidth = 300
.Name = .DataPropertyName
.DataSource = dtWorker
.ValueMember = "ID"
.DisplayMember = "Name"
.ReadOnly = False
End With
Me.dgwOps.Columns.Add(WIcol4)
C#:
var _with1 = WIcol4;
_with1.Width = "120";
_with1.HeaderText = "Worker";
_with1.DataPropertyName = "Worker";
_with1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
_with1.DefaultCellStyle.Padding = New Padding(0, 0, 6, 0);
_with1.DropDownWidth = 300;
_with1.Name = _with1.DataPropertyName;
_with1.DataSource = dtWorker;
_with1.ValueMember = "ID";
_with1.DisplayMember = "Name";
_with1.ReadOnly = False;
this.dgwOps.Columns.Add(WIcol4);
注意,对于要写入的列, DataGridView和列必须是ReadOnly = False。