Как я создаю новую строку в WPF DataGrid, когда он связывается с XmlDataProvider?

Я согласен с тем, что знание точных проблем, с которыми вы столкнетесь, поможет нам дать лучший ответ, но для начала вы можете воспользоваться .net sdk https://github.com/watson-developer-cloud/dotnet -standard-sdk и стандартная ссылка на API с примерами https://console.bluemix.net/apidocs/assistant

13
задан bluepolystyreneman 26 January 2009 в 15:13
поделиться

4 ответа

Вы попробовали установку CanUserAddRows = "Верный" на DataGrid?

0
ответ дан 1 December 2019 в 22:24
поделиться

Проблема в том, что пользователь не может добавлять строки, или в том, что когда пользователь добавляет строку, она не сохраняется в резервном хранилище XML? Я могу легко добавить сетку данных с CanUserAddRows = "True" в приложение WPF, привязать сетку к списку в памяти, а затем попросить пользователя добавить строки, которые отражаются в этом списке в памяти. Это заставляет меня думать, что ваша проблема заключается в сохранении в резервное хранилище.

Когда я привязываюсь к XML в файловой системе, я больше не могу добавлять записи в сетку данных. Я думаю, вам понадобится небольшой обходной путь: вы читаете файл в коллекцию в памяти, привязываетесь к нему, а затем обновляете файл соответствующим образом, когда пользователи добавляют строки.

0
ответ дан 1 December 2019 в 22:24
поделиться

Чтобы добавить строку в WPF DataGrid, привязанную к XmlDataSource, вам необходимо напрямую изменить резервное хранилище данных. Вы можете использовать DataGrid для сбора информации о новой строке от пользователя, а затем в событии RowEditEnding вы можете добавить информацию о строке в резервное хранилище и предотвратить фактическую попытку DataGrid зафиксировать изменение, используя его внутренняя логика. Поскольку DataGrid привязан к XmlDataSource, он будет отображать изменения, внесенные вами в резервное хранилище.

Вот общая идея:

private void MyDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
  if (e.EditAction == DataGridEditAction.Cancel)
  {
    e.Cancel = false;
    return;
  }

  if (e.EditAction == DataGridEditAction.Commit)
  {
    DataGridRow dgr = e.Row;
    XmlElement xe = myXmlDataProvider.Document.CreateElement("NewRowElement");
    foreach(DataGridCell cell in dgr.Cells)
    {
      xe.SetAttribute(cell.Name, cell.Value);
    }
    dataProvider.Document.DocumentElement.AppendChild(xe);
    e.Cancel = true;
  }
}
3
ответ дан 1 December 2019 в 22:24
поделиться

Убедитесь, что вы установили: CanUserAddRows = "True" и что конструктор по умолчанию для связанного класса доступен.

19
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: