0

我已加载了一个列表,名为dgvPrint的DataGridView从数据库中检索如下后更改的DataGridView列类型:如何结合

dgvPrint.DataSource = ReservedServices.GetAll(); 

的结果就像如下:

initial data

Worker柱和ServiceType列是一些整数,其是指两个表的主键。

如何将ServiceTypeWorker的列类型从简单文本更改为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); 
+0

所以,你也希望看到在阅读模式下的组合框? –

+0

其实也没什么,我尤其想改变工人 –

+0

所以,你正在得到一个文本框,当你编辑工作列? –

回答

0

你必须第一定义和添加列到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和列必须是只读=假。