2014-10-27 3 views
0

Есть некоторые проблемы с заполнением datagrid с динамическим источником. Например, я хочу заполнить datagrid объектами с различными параметрами. Эти параметры отображают динамические данные из базы данных. Количество столбцов может быть изменено, и количество параметров может быть изменено, но считается равным. Заполните заголовки:данные заполнения wpf datagrid

private void DataSourseChanged(SourceList sourceList) 
{ 
    Columns.Clear(); 
    Columns.Add(new DataGridTextColumn()); 
    if (sourceList != null) 
    { 
     foreach (var item in sourceList.ColumnsHeaders) 
      Columns.Add(new DataGridTextColumn { Header = item }); 
    } 
} 

public class SourceList 
{ 
    private readonly IList _columnsHeaders; 
    private readonly IList _rowsHeaders; 
    private readonly IList _dataRows; 

    public IList ColumnsHeaders 
    { 
     get { return _columnsHeaders; } 
    } 

    public IList RowsHeaders 
    { 
     get { return _rowsHeaders; } 
    } 

    public IList DataRows 
    { 
     get { return _dataRows; } 
    } 

    public SourceList(IList rowsHeaders, IList columnsHeaders, IList dataRows) 
    { 
     _rowsHeaders = rowsHeaders; 
     _columnsHeaders = columnsHeaders; 
     _dataRows = dataRows; 
    } 
} 

Я хочу, чтобы заполнить заголовки и строки (строки, как слияния _rowsHeaders [я] в первой колонке и других столбцах с _datarows [я]), но строка заполняется только с объектами, имеет свойство. Можно ли заполнить datagrid динамической длиной?

+0

Я did'n найти другое решение, но использовать динамический HTTP: // StackOverflow .com/questions/15819720/dynamic-add-c-sharp-properties-at-runtime – Andre

+0

И это решение не помогло мне – Andre

ответ

0

Там не решение, а создавать собственные сетки, производные от System.Windows.Controls.Grid и создать пользовательскую логику для заполнения сетки

public static readonly DependencyProperty CustomSourceProperty 
      = DependencyProperty.Register(
         "CustomSource", 
         typeof(SourceList), 
         typeof(InteractiveGrid), 
         new FrameworkPropertyMetadata(null, 
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
          CustomSourceChanged 
        ) 
        ); 

[Category("Group properties")] 
public SourceList CustomSource 
{ 
get { return (SourceList)GetValue(CustomSourceProperty); } 
set { SetValue(CustomSourceProperty, value); } 
} 

private void CustomSourceChanged(SourceList sourceList) 
{ 
//... 
} 

private static void CustomSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
((InteractiveGrid)d).CustomSourceChanged((SourceList)e.NewValue); 
}