Как отключить некоторые ячейки в DataGrid? - PullRequest
0 голосов
/ 03 июля 2018

Я нашел много ответов о переполнении стека, как отключить определенную ячейку в DataGrid в Windows Forms или WPF. Теперь я хочу задать тот же вопрос в 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 голосов
/ 03 июля 2018

Используйте 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;
    }
}
...