如何禁用DataGrid中的某些单元格?

时间:2018-07-03 09:09:09

标签: c# datagridview datagrid devexpress

我在Stack Overflow上找到了很多答案,如何在Windows Forms或WPF中禁用DataGrid中的特定单元格。现在我想在DevExpress中问同样的问题。谢谢您的回答!

我当前以某种方式工作的代码阻止用户检查网格中的特定复选框,但是此复选框看起来好像没有被禁用。如何在视觉上禁用此字段,使其变为灰色或完全不可见?

bool expression = ... // some expresssion

private void grid_ShownEditor(object sender, EventArgs e)
{
    GridView view  sender as GridView;
    if(view.FocusedColumn.FieldName == "specific column name with checkbox cells")
    {
        var row = view.GetRow(view.FocusedRowHandle);
        view.ActiveEditor.Enabled = expression;
    }
}

1 个答案:

答案 0 :(得分:1)

使用GridView.ShowingEditor和GridView.CustomDrawCell进行操作。参见:

private bool isDisabled = false;

private bool IsDisabled(int row, GridColumn col)
{
    if (col.FieldName == "somename")
        return isDisabled;
    return false;
}

private void GridView_ShowingEditor(object sender, CancelEventArgs e)
{
    var gv = sender as GridView;
    e.Cancel = IsDisabled(gv.FocusedRowHandle, gv.FocusedColumn);
}

private void GridView_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
{
    if(IsDisabled(e.RowHandle, e.Column))
    {
        e.Appearance.BackColor = Color.Gray;
        e.Appearance.Options.UseBackColor = true;
    }
}

如果您根本不想显示复选框,则可以执行以下操作:

private static RepositoryItemTextEdit _nullEdit;
public static RepositoryItemTextEdit NullEdit
{
    get
    {
        if (_nullEdit == null)
        {

            _nullEdit = new RepositoryItemTextEdit();
            _nullEdit.ReadOnly = true;
            _nullEdit.AllowFocused = false;
            _nullEdit.CustomDisplayText += (sender, args) => args.DisplayText = "";
        }
        return _nullEdit;
    }
}

private void GridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
    if(IsDisabled(e.RowHandle,e.Column))
    {
        e.RepositoryItem = NullEdit;
    }
}