【问题标题】:How to change DataGridView column type after binding绑定后如何更改 DataGridView 列类型
【发布时间】:2017-10-12 15:35:28
【问题描述】:

我已经加载了一个名为 dgvPrint 的 DataGridView,其中包含一个从数据库中检索的列表,如下所示:

dgvPrint.DataSource = ReservedServices.GetAll();

结果如下:

Worker 列和ServiceType 列是一些整数,它们引用两个表的主键。

如何将ServiceTypeWorker的列类型从简单文本更改为DataGridViewComboBoxColumn

注1:这两列的当前值是对应ComboBoxes的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);

【问题讨论】:

  • 所以您还想在读取模式下查看 Combobox?
  • 其实NO,特别想换工人
  • 那么,您当前在编辑工作列时得到了一个文本框?
  • @RandRandom ,我在 datagridview 中设置了 readonly = false,但是我无法编辑文本

标签: c# datagridview datagridviewcolumn datagridviewcombobox


【解决方案1】:

您必须首先定义并添加列到 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。

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多