Telerik XML 数据源绑定的问题

Telerik GridView 默认的 XElement 数据源的直接绑定,会导致内置的sort, filter ,group等功能无法使用.

原因在于Telerik GridView的那些功能是根据数据类型实现的,而XElement绑定在数据源本身是无法区分类型的。

一个解决方案是绑定的属性转换为具体的 一个个属性,也就是Telerik 官网所谓的various datasource当中XML的绑定方式

另外一个比较适合实际项目的解决方案是 讲数据源转变为Dynamic数据源,然后将ItemSource绑定到这个Dynamic数据源当中。
别的方式或许也有,我没试验出来.

代码如下:

 public void LoadXmlData(XElement data)
        {
            if (data != null)
            {
                this.Items = new ObservableCollection<dynamic>(from element in data.Elements() select new DataRow(ToDictionary(element), element));
            }
        }
   private IDictionary<string, object> ToDictionary(XElement element)
        {
            var dict = new Dictionary<string, object>();
            foreach (var e in element.Elements())
            {
                dict.Add(e.Name.LocalName, e.Value);
            }

            return dict;
        }  

添加一个转换Dynamic的类:

 public class DataRow : DynamicObject, INotifyPropertyChanged
    {
        readonly IDictionary<string, object> data;

        //public XElement ItemXml { get; set; }

        public DataRow(IDictionary<string, object> source,XElement item)
        {
            data = source;
            //Item = item;
        }

        public override IEnumerable<string> GetDynamicMemberNames()
        {
            return data.Keys;
        }

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = this[binder.Name];

            return true;
        }

        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            this[binder.Name] = value;

            return true;
        }

        public object this[string columnName]
        {
            get
            {
                if (data.ContainsKey(columnName))
                {
                    return data[columnName];
                }

                return null;
            }
            set
            {
                if (!data.ContainsKey(columnName))
                {
                    data.Add(columnName, value);

                    OnPropertyChanged(columnName);
                }
                else
                {
                    if (data[columnName] != value)
                    {
                        data[columnName] = value;

                        OnPropertyChanged(columnName);
                    }
                }
            }
        }

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }

  

时间: 2024-08-29 03:39:20

Telerik XML 数据源绑定的问题的相关文章

XML数据源快速开发框架&mdash;&mdash;XmlFramwork

浪漫的周末从cnblogs开始.话说,今天和往常的周末一样,韩君躲在被窝里用手机翻阅着园子里的珠玑.一篇<应用XML作为数据库的快速开发框架>的文章在韩君脑子里激起了一波球形闪电.想想上周中刚好完成的一个WinCE小项目,这波久久不能平息.韩君做了一个比马兄更艰难的决定,秒速穿戴衣裤后,开始了那第N次的亲密接触... 成果: 一个外传版的XML数据源快速开发框架:XmlFramwork. PathRoute:路由XML数据文件路径: List<T>:XML实体类的泛型集合,对应XM

C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结

我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是一些控件: Control: 控件基类,有一个DataBindings对象,它是一个ControlBindingCollection类,这个类继承与BindingsCollection,里面有一个Binding的列表对象,其中Binding对象时一个记录了属性名,数据源,数据成员等的对象.还有个Bi

DynamicReport使用XML数据源+ireport的.jxml文件作为模板

DynamicReport好不好用我不知道,但是它是开源的,文档还算全?用户的需求是想自己设计,但是ireport是给开发级别的使用的,据说用户并不想学,他们只想拖拖拽拽就出来一个报表. 功能需求总结: 1.用户自主设计报表样式 2.数据动态加载 解决方案: 将用户拖拽的结果,参照jxml的格式生成jxml文件,作为模板加载到DynamicReport里面: 数据源使用xml格式数据,可以实现动态 本文版翻译权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置

数据源绑定

ASP.NET数据绑定总结 概念: 数据绑定(data binding):数据源与服务器控件的关联,“数据绑定”是一种把数据绑定到一种用户界面元素(控件)的通用机制. 分类: ASP.NET中涉及到的数据绑定大概可以分为: 使用<%# 表达式 %> 使用DataSource属性 使用数据源控件 使用Eval方法 使用<%# 表达式 %> 绑定数据源 对于这种绑定方式,无论是Html标记,还是Web服务器控件都是实用的. 属性绑定: 例:将HTML文本框文本要绑定到页面的一个字段na

GridView数据源绑定的一个小问题

在使用GridView绑定数据源的时候,遇到了一个问题,因为图简单,没有注意到,贴出错误截图: 找了半天没有找出错误,在网上找了之后,才发现是一个细节引起的错误. 后台是这样写的: 1 namespace rowcountdemo 2 { 3 public partial class WebForm1 : System.Web.UI.Page 4 { 5 protected void Page_Load(object sender, EventArgs e) 6 { 7 List<Student

xml文件绑定chenckbox选择框

//xml文件如下: <?xml version="1.0" encoding="utf-8" ?> <CallReson> <!--电子黄页--> <EYellow value="0" name="取消业务"/> <EYellow value="1" name="咨询电子黄页相关平台"/> <EYellow value=

WPF 将数据源绑定到TreeView控件出现界面卡死的情况

首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的每一个节点的类型都是TreeMode,我们还定义一些Children属性,Parent属性用于定义当前节点的子节点和父节点,当然还定义了一些常见的Name.ToolTip.ID.IsExpand.IsChecked(主要是在每一个节点前面添加了一个CheckBox)等属性,另外的一些属性就是具体需要

在Bootstrap开发框架中使用dataTable直接录入表格行数据(2)--- 控件数据源绑定

在前面随笔<在Bootstrap开发框架中使用dataTable直接录入表格行数据>中介绍了在Web页面中使用Jquery DataTable插件进行对数据直接录入操作,这种处理能够给用户提供较好的数据录入体验,本篇继续上篇的内容,继续介绍这个直接录入的处理操作,主要涉及到控件的初始化和数据源的绑定等操作内容,随着对这个处理的深入了解,我发现可以控制的内容也更加丰富,能够更好的实现各种所需的效果. 1.直接录入数据的界面分析 在之前介绍的数据直接录入处理的时候,界面效果如下所示. 上面的界面处

asp.net 中使用不同的数据源绑定gridview

第一种,使用SqlDataReader绑定gridview.代码如下: public SqlDataReader bind() { SqlConnection con = new SqlConnection(sqlcon); string sql = "SELECT * FROM test"; SqlCommand cmd = new SqlCommand(sql, con); con.Open(); SqlDataReader dr = cmd.ExecuteReader(Comma