gpt4 book ai didi

.net - 在 DataGridViewColumn 中混合单元格类型

转载 作者:行者123 更新时间:2023-12-04 18:49:53 25 4
gpt4 key购买 nike

是否可以在单个 DataGridViewColumn 中同时拥有 DataGridViewComboBoxCells 和 DataGridViewTextBoxCells?或者我绝对仅限于每列一种类型?

最佳答案

对此有一个奇怪的解决方案。
默认情况下,将列创建为 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。

关于.net - 在 DataGridViewColumn 中混合单元格类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com