当前位置:  开发笔记 > 小程序 > 正文

WPF DataGrid绑定到数据表

如何解决《WPFDataGrid绑定到数据表》经验,为你挑选了0个好方法。

这让我疯了.我在代码中创建一个DataGrid,然后将其绑定到数据表.这是动态的,每次创建网格时行和列都会不同.

基本上我遍历我的数据表并为每列创建DataGrid列,如下所示:

private static void CreateDataGridColumns(DataGrid datagrid, Document doc)
{
    if (doc == null) return; //return 

    datagrid.Columns.Clear();
    foreach (var item in doc.Keys)
    {
        var column = new DataGridTemplateColumn
        {
           Header = item,
           CellTemplateSelector = new CustomRowDataTemplateSelector(),
         };

        datagrid.Columns.Add(column);
    }
}

正如您所看到的,我正在使用自定义数据模板选择器,因此我可以根据其内容以不同方式呈现单元格.

这是模板选择器

public class CustomRowDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate
        SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;

        var presenter = container as ContentPresenter;
        var gridCell = presenter.Parent as DataGridCell;

        if (element != null && item != null && gridCell != null)
        {
            var row = item as DataRow;

            if (row != null)
            {
                var cellObject = row[gridCell.Column.DisplayIndex];

                //set template based on cell type

                if (cellObject is DateTime)
                {
                    return element.FindResource("dateCell") as DataTemplate;
                }

                return element.FindResource("stringCell") as DataTemplate;
            }


        }

        return null;
    }
}

这是我的stringCell DataTemplate


    
        
    

问题是为每个单元格调用模板选择器(如预期的那样),但我不知道它是哪个单元格,所以我不知道如何在TextBlock上设置Text.我很乐意做这样的事情


    
        
    

但是我没有什么可以获得CellIndex.我怎样才能做类似这样的事情,我可以设置Path = Row [CellIndex]

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有