如何结合
问题描述:
我已加载了一个列表,名为dgvPrint
的DataGridView从数据库中检索如下后更改的DataGridView列类型:如何结合
dgvPrint.DataSource = ReservedServices.GetAll();
的结果就像如下:
Worker
柱和ServiceType
列是一些整数,其是指两个表的主键。
如何将ServiceType
和Worker
的列类型从简单文本更改为DataGridViewComboBoxColumn
?
注1:这两列的当前值是相应组合框的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);
答
你必须第一定义和添加列到DataGridView(使用GUI在VS或代码每个示例波纹管),设置一个正确的.DataPropertyName。其中一列是“工作人员”列,其中还会包含额外的代码,即您在帖子中列出的代码。然后然后添加数据源。
换句话说,我觉得你的代码是正确的,但指定数据源并设置列的属性顺序必须改变。
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和列必须是只读=假。
所以,你也希望看到在阅读模式下的组合框? –
其实也没什么,我尤其想改变工人 –
所以,你正在得到一个文本框,当你编辑工作列? –