2017-02-17 2 views
0

Я использую сетку данных WPF для редактирования таблицы базы данных. Таблица содержит несколько записей с 16 столбцами (свойствами).Как сделать ячейку Datagrid WPF ReadOnly для определенных строк?

Я хочу, чтобы колонка была прочитана, только если пользователь пытается ее отредактировать, когда один из столбцов выбранной записи имеет определенное значение (другими словами, отключите редактирование этого конкретного столбца для определенных записей).

Я думал привязать к столбцу свойство IsReadOnly, но я не знаю, как передать столбец, который мне нужно проверить (или, по крайней мере, текущую строку) в качестве параметра преобразователя.

Есть ли у кого-нибудь идеи, как это сделать?

+0

Вы можете передать все элементы пользовательского интерфейса в IValueConverters. Однако он не убедил его в большой идее. http://stackoverflow.com/questions/6350388/can-i-pass-entire-ui-element-into-a-ivalueconverter Вы можете передать весь DataGrid в IValueConverter и посмотреть на выбранную строку. – 0x4f3759df

ответ

0

Я предлагаю сделать конкретное DataColumn Readonly, установив ItemsSourceDataGrid. Рассмотрим, например, следующее:

 DataTable tab = new DataTable(); 
     DataColumn col = tab.Columns.Add("a"); 
     // data added code 
     foreach (DataColumn col in tab.Columns) 
     foreach (DataRow r in tab.Rows) 
     { 
       if (r[col].Equals("...")) 
       { 
        col.ReadOnly = true; 
        break; 
       } 
     } 
1

Я нашел решение здесь. Использование события DataGrid.BeginningEdit для условной проверки, является ли ячейка редактируемой, а затем установить свойство Cancel в аргументах события, если нет.

Conditionally making readonly to WPF DataGridCell

Я не знаю, если это лучшее решение, но это работает.

Смежные вопросы