创建自定义数据源

简介:
看到一则使用CollectionBase为父类创建自定义数据 源的例子:
using System;
namespace 自定义数据源
{
       /// <summary>
       
/// 自定义数据源
       
/// </summary>

       public class cusdatasource : System.Collections.CollectionBase
       {

                       public cusdatasource()
                       {
                               for(int i = 0;i < 10;i++)
                               {
                                       base.InnerList.Add(new Element(i,string.Format("a[{0}]",i)));
                               }

                       }

       }


       public class Element
       {
               private string name;
               public string ValueName
               {
                       get{return name;}
               }

               private int valu;
               public int Value
               {
                       get{return valu;}
               }

               public Element(int val,string nam)
               {
                       name = nam;
                       valu = val;
               }

       }

}

然后我们new一个cusdatasource,并绑定到datagrid上就会出现2列:value和name;

我们还可以通过实现IListSource 或 IEnumerable 接口,来制作自定义的数据源,较上面的麻烦一点,不过更灵活:
using System;

namespace personaltest
{
       /// <summary>
       
/// source 的摘要说明。
       
/// </summary>

       public class source:System.ComponentModel.IListSource
       {
               private data d=new data();
               public source()
               {
                       for(int i=0;i<10;i++)
                       
                               d.Add(new dataitem(i,string.Format("this is {0}",i)));
                       }

               }

               #region IListSource 成员

               public System.Collections.IList GetList()
               {
                       // TODO:  添加 source.GetList 实现
                       return d;
               }


               public bool ContainsListCollection
               {
                       get
                       {
                               // TODO:  添加 source.ContainsListCollection getter 实现
                               return false;
                       }

               }


               #endregion

       }


       public class data:System.Collections.IList,System.Collections.IEnumerator
       {
               protected System.Collections.ArrayList _dataitems;
               protected int _ptr=0;
               public data()
               {
                       _dataitems=new System.Collections.ArrayList();
               }

               #region IList 成员

               public bool IsReadOnly
               {
                       get
                       {
                               // TODO:  添加 data.IsReadOnly getter 实现
                               return false;
                       }

               }


               public object this[int index]
               {
                       get
                       {

                               return _dataitems[index];
                       }

                       set
                       {
                               _dataitems[index]=value;
                       }

               }


               public void RemoveAt(int index)
               {
                       if(index>=0 && index<_dataitems.Count)
                               _dataitems.RemoveAt(index);
               }


               public void Insert(int index, object value)
               {
                       if(index>=0 && index<_dataitems.Count)
                       {
                               _dataitems.Insert(index,value);
                       }

               }


               public void Remove(object value)
               {
                       _dataitems.Remove(value);
               }


               public bool Contains(object value)
               {
                       return _dataitems.Contains(value);
               }


               public void Clear()
               {
                       _dataitems.Clear();
               }


               public int IndexOf(object value)
               {
                       return _dataitems.IndexOf(value);
               }


               public int Add(object value)
               {
                       return _dataitems.Add(value);
               }


               public bool IsFixedSize
               {
                       get
                       {
                               return _dataitems.IsFixedSize;
                       }

               }


               #endregion


               #region ICollection 成员

               public bool IsSynchronized
               {
                       get
                       {
                               return false;
                       }

               }


               public int Count
               {
                       get
                       {
                             return _dataitems.Count;
                       }

               }


               public void CopyTo(Array array, int index)
               {
               }


               public object SyncRoot
               {
                       get
                       {
                               return null;
                       }

               }


               #endregion


               #region IEnumerable 成员

               public System.Collections.IEnumerator GetEnumerator()
               {
                       return this;
               }


               #endregion


               #region IEnumerator 成员

               public void Reset()
               {
                       _ptr=0;
               }


               public object Current
               {
                       get
                       {
                               return this[_ptr++];
                       }

               }


               public bool MoveNext()
               {
                       if(_ptr<this.Count)
                       {
                               return true;
                       }

                       else
                       {
                               this.Reset();
                               return false;
                       }

               }


               #endregion

       }


       public class dataitem
       {
               private string name;
               public string ValueName
               {
                       get{return name;}
               }

               private int valu;
               public int Value
               {
                       get{return valu;}
               }
 
               public dataitem(int val,string nam)
               {
                       name = nam;
                       valu = val;
               }

       }

}

实现了IListSource接口的自定义数据源 ,IEnumerable在其中也有实现;
需要注意的地方,IEnumerator接口的movenext ()方法,在foreach语句的时候会先执行一次 ,然后才会用current()方法返回"当前值" ,所以指针初始化为0
的话就不能在movenext()方法中递增指针 ,而应该放在current()中。

引用:http://www.cnblogs.com/zpisgod/articles/70024.html
相关文章
|
12天前
|
Cloud Native Java API
Spring Boot 3.0 vs. 2.0
Spring Boot 3.0 带来革命性升级:全面支持 Java 17+ 与 Jakarta EE,引入原生编译、增强可观测性,推动云原生转型。相比 2.0,性能更强、启动更快、更现代。新项目应首选 3.0,老项目需逐步迁移,拥抱未来。
|
存储
若依框架 --- pdf文件上传预览功能实现
若依框架 --- pdf文件上传预览功能实现
954 0
若依框架 --- 修改默认跳转页面
若依框架 --- 修改默认跳转页面
1330 0
|
2月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
375 11
|
人工智能 搜索推荐
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
阿里云logo设计官方入口开启二级域名,阿里云智能logo设计,为用户生成logo突破200万件!每个生成的logo都有数十种VI应用样式,办公用品、户外广告、品牌周边…可直观感受logo在各种场景下的效果,个性化的丰富应用效果,帮助用户进行判断。
15862 5
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
|
存储 Java Maven
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
2515 5
|
4月前
|
存储 JavaScript 前端开发
element ui <el-date-picker> 设置展示当前月
在 Element UI 中,使用 `el-date-picker` 的 `value-format` 属性可将日期值格式化为指定字符串。设置 `type=&quot;month&quot;` 时,绑定值默认为 Date 对象,通过 `value-format=&quot;yyyy-MM&quot;` 可将其转为如 &quot;2023-05&quot; 格式,便于存储与处理。
1058 0
|
前端开发 对象存储
基于RuoYi-Flowable-Plus的ruoyi-nbcio项目的formdesigner文件上传与回显处理
基于RuoYi-Flowable-Plus的ruoyi-nbcio项目的formdesigner文件上传与回显处理
277 0
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
1475 3
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
863 1