Silverlight系列--动态生成DataGrid列 根据动态列绑定Dictionary数据

1.获取表头数据源动态生成DataGrid表头

                    DataGridTextColumn d = new DataGridTextColumn();
                    d.Header = itemPriceClass.PriceKindCode + itemPriceClass.PriceKindName;
                    Binding bin = new Binding();
                    bin.Converter = new RowIndexConverter();
                    bin.ConverterParameter = itemPriceClass.PriceKindCode;
                    d.Binding = bin;
                    d.CanUserSort = false;
                    d.FontSize = 13;
                    d.IsReadOnly = true;
                    dgList.Columns.Add(d);

注:其中Binding这一段是对该列的数据绑定处理的,由于数据源是Dictionary中获取,所以要对数据显示部分进行处理。

        public class RowIndexConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                Row row = value as Row;
                string index = parameter as string;
                return row[index];
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

注:最终DataGrid的数据源部分就是List<Row>

        public class Row
        {
            Dictionary<string, object> dictionary = new Dictionary<string, object>();

            public object this[string index]
            {
                get { if (dictionary.ContainsKey(index)) { return dictionary[index]; } else { return 0; } }
                set { dictionary[index] = value;}
            }
        }

2.对数据源进行处理

得到的数据源格式

inpareaname pricekindname realcost pricekindcode

A      ca      100    101

A      ba       150   102

B                 da                  100   104

注:pricekindname就是表头显示的数据

private List<Row> CreateDataGridColumn()
        {
            List<Row> result = new List<Row>();
            if (itemPriceClassList != null && itemPriceClassList.Count > 0)
            {
                if (wardExpenseDetailByPriceItemClassList != null && wardExpenseDetailByPriceItemClassList.Count > 0)
                {
                    foreach (WardExpenseDetailByPriceItemClass detail in wardExpenseDetailByPriceItemClassList)
                    {
                        if (result.Count > 0)
                        {
                            bool flag = false;
                            foreach (Row r in result)
                            {
                                if (r["AreaName"].ToString() == detail.InpAreaName)
                                {
                                    r[detail.PriceKindCode] = detail.RealCost;
                                    flag = true;
                                    break;
                                }
                            }
                            if (!flag)
                            {
                                Row row = new Row();
                                row["AreaName"] = detail.InpAreaName;
                                row[detail.PriceKindCode] = detail.RealCost;
                                result.Add(row);
                            }
                        }
                        else
                        {
                            Row row = new Row();
                            row["AreaName"] = detail.InpAreaName;
                            row[detail.PriceKindCode] = detail.RealCost;
                            result.Add(row);
                        }
                    }
                }
            }
            rowDataList = result;
            return result;
        }

注:还有一种解决方案---未测试

1.在silverlight的service层中动态生成实体类,其中属性为表头的值,service层动态拼接成List<T>传到client端。

注:object类型传到client端会出错的。

Silverlight系列--动态生成DataGrid列 根据动态列绑定Dictionary数据

时间: 2024-10-28 11:15:17

Silverlight系列--动态生成DataGrid列 根据动态列绑定Dictionary数据的相关文章

PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)

关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datagrid,并加载数据 解决办法: 使用tree菜单的onClick事件: $('#tree').tree( { url:'tree_getData.php', onClick:function(node){ //判断点击的节点是否是子节点是子节点就创建datagrid,否则就return打开这个节点

解决jquery 动态生成的元素的事件无法绑定

一.错误示例:对于自己用脚本动态生成的元素,无法绑定事件.例如: body下的代码: <body> <ul>     <li><span class="class1">11111</span></li>     <li><span class="class1">22222</span></li>     <li><span cla

Silverlight日记:动态生成DataGrid、行列装换、动态加载控件

本文主要针对使用DataGrid动态绑定数据对象,并实现行列转换效果. 一,前台绑定 <sdk:DataGrid x:Name="dataGrid2" Style="{StaticResource ResourceKey=safeDataGrid2}" /> using System; using System.Collections; using System.Collections.Generic; using System.Collections.

毕业设计---jQuery动态生成的a标签的事件绑定

这几天在毕业设计的前端设计阶段,准备放弃使用jsp,完全通过html+ajax+SSH进行网站的编写,在前端的页面显示我准备使用jQuery来实现数据的动态绑定.但是遇到动态添加的a标签无法直接通过$(element).click();来添加点击事件,通过网上的查询,在动态添加的标签绑定事件需要通过事件委托而非事件绑定. $("body").on("click", ".delete", function (){ del($(this).paren

JQ动态生成的元素,原事件绑定失效

Old Code: $('code').click(function () { console.log($(this).text()); }); New Code:(.container 是<code>所在的div) $('.container').on("click", "code", function () { console.log($(this).text()); }); 之前只是知道官方推荐使用on来生成事件,并不知道其好处,这次知道了 话说,

datagrid动态生成列并动态赋值

这周接到的任务是动态生成某datagrid的标题,并且要能够根据动态生成的标题来再去数据库中找到相应的值并拼接赋值上去. 项目经理给我的静态页面如下: 左边一列为车型,右边的上面是零件号,下面是固定的,直接循环生成就行,但是数量不一定,需要动态生成.里面的数据是自动加载的. 后台数据库中能够得到的数据大概是这个形式: 这个问题的难点如下: 1.动态生成datagrid的column. 2.将SQL拿出来的数据拼接成前台需要的横行形式,也就是列转行. 先说下解决的思路和方法. 首先是datagri

EasyUI 动态生成列属性

需求:通过Model类属性动态生成DataGrid表格 1.定义ColumnTitle注解类 package com.mrchu.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 列标题注解类 * * @author MrChu * @version 1.0 * @date

jQuery对于动态生成的元素绑定无效的问题~~

问题:很多时候发现,对动态生成的元素绑定click事件是无效的- 原因:直接绑定到动态生成的元素是无效的,是因为Jquery扫描文档找出所有的$(‘’)元素,并把函数绑定到每个元素的click事件上,表明是现有页面上存在的元素,动态生成的元素不包括在内. 解决方法:代理或者说是委托on( ),实现原理是事件的冒泡,在指定的祖先元素中注册事件,元素事件触发,传播到这个元素然后进行筛选. 可以在祖先元素中绑定事件,比如div是祖先元素,而新生成的元素都是div的子元素,所以动态生成的元素的事件就可以

WPF Datagrid 动态生成列 并绑定数据

原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可以用ObservableCollection集合代表 动态创建属性 WPF 动态生成对象属性 (dynamic) ObservableCollection<NameList> listName = new ObservableCollection<NameList>(); privat