2014-10-27 118 views
0

填充datagrid动态源有一些问题。例如,我想用具有各种参数的对象填充数据网格。该参数显示来自数据库的动态数据。列数可能会改变,参数数量可能会改变,但计数等于。填写标题:wpf数据网格填充数据

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的合并[i]于第一列和其他列与_datarows [1]),但行只填充与具有属性的对象。我可以填充动态长度的数据网格吗?

+0

我did'n找到另一种解决办法,但使用动态HTTP创建自定义逻辑://计算器.com/questions/15819720/dynamic-add-c-sharp-properties-at- – Andre 2014-10-27 09:13:23

+0

它的解决方案对我没有帮助 – Andre 2014-10-27 12:08:11

回答

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); 
}