Sma*_*ery 5 .net datagridview datagridviewcolumn winforms
是否可以在单个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;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,在创建列时,我必须确保它是通用列; 即不是DataGridViewTextBoxColumn:
var col = new DataGridViewColumn
{
CellTemplate = new DataGridViewTextBoxCell()
};
Run Code Online (Sandbox Code Playgroud)
这样,我可以稍后更改CellTemplate.
归档时间: |
|
查看次数: |
7539 次 |
最近记录: |