Sim*_*mon 1 .net datagridview winforms
我有一个DGV绑定到一个对象列表.这工作正常,除了其中一个对象属性是布尔值,因此显示为一个复选框,但我更喜欢一个简单的是/否文本字段.我已经考虑添加一个额外的列,并根据布尔值填充适当的字符串,但这似乎有点超过顶部.有没有更简单的方法?
DGV是只读的.
如上所述,似乎无法在数据绑定方案中更改布尔值的视觉外观.甚至DataGridViewCellStyle.FormatProvider也无法正常使用System.Int32,System.Int64,System.Decima等类型.
因此,我找到了适用于我的解决方法.可能它不是最好的解决方案,但目前它符合我的需求.我处理DataGridView.ColumnAdded事件并将DataGridViewCheckBoxColumn替换为DataGridViewTextBoxColumn.之后我使用CellFormating事件(由Microsoft推荐,请参阅上面的链接)来格式化源数据.
private DataGridViewTextBoxColumn textBoxColumn = null;
void _dataGrid_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
// Avoid recursion
if (e.Column == textBoxColumn) return;
DataGridView gridView = sender as DataGridView;
if (gridView == null) return;
if( e.Column is DataGridViewCheckBoxColumn)
{
textBoxColumn = new DataGridViewTextBoxColumn();
textBoxColumn.Name = e.Column.Name;
textBoxColumn.HeaderText = e.Column.HeaderText;
textBoxColumn.DataPropertyName = e.Column.DataPropertyName;
gridView.Columns.Insert(e.Column.Index, textBoxColumn);
gridView.Columns.Remove(e.Column);
}
}
void _dataGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewColumn col = _dataGrid.Columns[e.ColumnIndex];
try
{
if ( col.Name == "IsMale")
{
bool isMale = Convert.ToBoolean(e.Value);
e.Value = isMale ? "male" : "female";
}
}
catch (Exception ex)
{
e.Value = "Unknown";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6100 次 |
| 最近记录: |