2010-10-07 3 views
3

Я просто хочу добавить новую строку, у меня есть свой источник данных в объектах, в которых мне нужно сделать некоторую обработку. мне нужно что-то вроде ниже для WPF DataGrid ...Могу ли я программно добавить строку в WPat datagrid?

DataRow row = dataTable.NewRow(); 
foreach (NavItem item in record.Items) 
{ 
    row[item.FieldNo.ToString()] = item.RecordValue; 
} 
dataTable.Rows.Add(row); 
+3

Почему вы не привязываете свой источник данных к источнику данных wpf datagrid, а затем, когда ваш источник данных обновляется (как и в новой строке), он будет добавлен в wpf datagird. – whoisthis

+0

Я пытался привязать данные к источнику itemssource, он работает, но заголовок, видимость и другое сопоставление с datagrid wpf неверны. Я попробовал список словарей, в которых я хотел, чтобы ключ был столбцом и значением значения строки, которое не работает. У меня заканчиваются идеи, все ресурсы в Интернете со статическими столбцами. –

+0

Мой источник данных находится в объектах, которые требуют обработки перед отображением, я не могу связать его напрямую. –

ответ

0

Я не знаю, если это правильное решение, но я придумал что-то вроде этого, в отчаянии:

foreach (NavField field in this.Fields) 
{ 
     DataGridTextColumn column = new DataGridTextColumn(); 
     column.Header = field.FieldNo.ToString(); 

     //Some other logic 
     // Hide non active and hidden fields 
     if (!field.Active || !field.Show) 
      column.Visibility = System.Windows.Visibility.Collapsed; 

     grid.Columns.Add(column); 
    } 

Тогда я добавить DataTable в ItemsSource:

this.dataGridLines.ItemsSource = dataTable.DefaultView; 

Если я установил DataTable непосредственно, он не заботится о столбцах от DataTable и автоматической генерации собственных столбцов, не знает почему ..

+0

Вам также необходимо установить: AutoGenerateColumns - false; –

+0

Итак, каждый раз, когда ваш источник источника изменяется, чтобы изменить поле. Как изменить, вам нужно будет повторно запустить цикл для добавления столбцов? – whoisthis

+0

Если вы знаете, что у вас есть все столбцы, то вы добавляете их в XAML и привязываете видимость этих столбцов, чтобы, если в источнике данных он позже изменился, он может быть отражен. Или вы можете создать коллекцию столбцов и связать их с DP-представлением, которое может генерировать столбцы. – whoisthis

3

Вы должны использовать ObservableCollection<NavItem> в качестве источника данных. Затем просто добавление нового элемента в вашу коллекцию добавит его в datagrid.

См. Это MSDN article.