Как я могу установить значение ячейки таблицы данных, используя ее значения столбца и индекса строки? - PullRequest
7 голосов
/ 12 октября 2011

Как вставить значение в определенную ячейку таблицы данных, используя столбцы ячеек и индексы строк.У меня есть индекс строки и столбца, сохраненные в виде целых чисел.

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

        int column = dataGrid2.CurrentCell.Column.DisplayIndex;
        int row = dataGrid2.SelectedIndex;

Спасибо,

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Для программного обновления WPF DataGridCell может быть много способов ...

Одним из способов является обновление значения в самом связанном элементе данных. Таким образом, уведомления об изменении свойства будут срабатывать для всех подписанных визуальных элементов, включая сам DataGridCell ...

Приближение отражения

 var boundItem = dataGrid2.CurrentCell.Item;

 //// If the column is datagrid text or checkbox column
 var binding = ((DataGridTextColumn)dataGrid2.CurrentCell.Column).Binding;

 var propertyName = binding.Path.Path;
 var propInfo = boundItem.GetType().GetProperty(propertyName);
 propInfo.SetValue(boundItem, yourValue, new object[] {});

Для DataGridComboBoxColumn вам придется извлечь SelectedValuePath и использовать его вместо propertyName.

В противном случае включите перевод ячейки в режим редактирования и обновление значения ее содержимого, используя некоторое поведение в EditingElementStyle ... Я считаю это громоздким.

Дайте мне знать, если вам это действительно нужно.

1 голос
/ 11 февраля 2017

Я использовал вариант, основанный на WPF - это пример для всей строки, и он работал!:

(sender as DataGrid).RowEditEnding -= DataGrid_RowEditEnding;

foreach (var textColumn in dataGrid2.Columns.OfType<DataGridTextColumn>())
            {
                var binding = textColumn.Binding as Binding;
                if (binding != null)
                {
                    var boundItem = dataGrid2.CurrentCell.Item;
                    var propertyName = binding.Path.Path;
                    var propInfo = boundItem.GetType().GetProperty(propertyName);
                    propInfo.SetValue(boundItem, NEWVALUE, new object[] { });
                }
            }

(sender as DataGrid).RowEditEnding += DataGrid_RowEditEnding;

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

т.д .: включить propertyName или propInfo ... propInfo.SetValue (boundItem, (type) NEWVALUE, новый объект [] {});

                    switch (propertyName)
                    {
                        case "ColumnName":
                            propInfo.SetValue(boundItem, ("ColumnName"'s type) NEWVALUE, new object[] { });
                            break;
                        default:
                            break;
                    }
1 голос
/ 12 октября 2011

Для сетки данных вы получаете доступ к строкам через свойство Items.Ячейки являются коллекцией элемента.

dataGrid2.Items[row].Cells[column].Text = "text";

Это работает, пока данные связаны с сеткой данных в течение текущего жизненного цикла страницы.Если это не так, то я полагаю, что вы застряли при ходьбе за штурвалом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...