.net – 绑定的DataGridView可以使用文本单元格作为布尔值吗?

我有一个DGV绑定到一个对象列表.这工作正常,除了其中一个对象属性是布尔值,因此显示为一个复选框,但我更喜欢一个简单的是/否文本字段.我已经考虑过添加一个额外的列并根据布尔值填充相应的字符串,但这似乎有点超过顶部.有更容易的方法吗?

DGV是只读的.

如上所述,似乎无法在数据绑定方案中更改布尔值的视觉外观.
甚至DataGridViewCellStyle.FormatProvider也无法正常使用System.Int32,System.Int64,System.Decima等类型.

> http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=350751
> social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/894580c5-ef14-4123-9d8e-1fd6efc3f582/

因此,我找到了适用于我的解决方法.可能它不是最好的解决方案,但目前它符合我的需求.
我处理DataGridView.ColumnAdded事件并用DataGridViewTextBoxColumn替换DataGridViewCheckBoxColumn.之后我使用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";
    }
}
https://stackoverflow.com/questions/1033282/can-a-bound-datagridview-use-text-cell-for-boolean-values

转载注明原文:.net – 绑定的DataGridView可以使用文本单元格作为布尔值吗?