【问题标题】:Mixing cell types in a DataGridViewColumn在 DataGridViewColumn 中混合单元格类型
【发布时间】:2011-11-29 16:53:49
【问题描述】:

是否可以在单个 DataGridViewColumn 中同时包含 DataGridViewComboBoxCells 和 DataGridViewTextBoxCells?还是我绝对限制每列只有一种类型?

【问题讨论】:

标签: .net winforms datagridview datagridviewcolumn


【解决方案1】:

对此有一个奇怪的解决方案。
默认情况下,将列创建为 TextBox。
处理单元格单击或单元格进入事件。
如果 ColumnIndex 匹配,则将列类型转换为 ComboBox 并设置项目。
一旦从相应的列索引触发单元格离开事件,将其转换回文本框。
不要忘记在转换之前从 Combo 读取文本并将其设置为 TextBox。

我知道这不是恰当的解决方案,但有效。
我很想知道是否有人有更好的主意。

提问者的编辑:

这是我最终编写的代码:

// Using CellClick and CellLeave in this way allows us
// to stick combo boxes in a particular row, even if the
// parent column type is different
private void dataGrid_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex >= FIRST_COL && e.ColumnIndex <= LAST_COL && e.RowIndex == ROW_OF_INTEREST)
    {
        object value = dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
        dataGrid.Columns[e.ColumnIndex].CellTemplate = new DataGridViewComboBoxCell();
        var cell = new DataGridViewComboBoxCell {Value = value};
        cell.Items.AddRange(_values);
        dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex] = cell;
    }
}

private void dataGrid_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex >= FIRST_COL && e.ColumnIndex <= LAST_COL && e.RowIndex == ROW_OF_INTEREST)
    {
        object value = dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
        dataGrid.Columns[e.ColumnIndex].CellTemplate = new DataGridViewTextBoxCell();
        var cell = new DataGridViewTextBoxCell {Value = value};
        dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex] = cell;
    }
}

另外,在创建列时,我必须确保它是通用列;即不是 DataGridViewTextBoxColumn:

var col = new DataGridViewColumn
              {
                  CellTemplate = new DataGridViewTextBoxCell()
              };

这样,我可以稍后更改 CellTemplate。

【讨论】:

  • 非常感谢 - 这很好用。在标记为接受之前,我很想看看是否有任何“更清洁”的解决方案;但这是一个很大的帮助!
猜你喜欢
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2016-09-15
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多