创建自定义数据源

简介:
看到一则使用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
相关文章
若依框架 --- 修改默认跳转页面
若依框架 --- 修改默认跳转页面
1164 0
|
人工智能 搜索推荐
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
阿里云logo设计官方入口开启二级域名,阿里云智能logo设计,为用户生成logo突破200万件!每个生成的logo都有数十种VI应用样式,办公用品、户外广告、品牌周边…可直观感受logo在各种场景下的效果,个性化的丰富应用效果,帮助用户进行判断。
15615 5
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
|
存储 Java Maven
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
2250 5
|
2月前
|
存储 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; 格式,便于存储与处理。
708 0
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
1203 3
|
Java Maven
Maven的安装与配置
Maven的安装与配置
251 1
|
11月前
|
JavaScript 前端开发 Java
Springboot+vue实现文件的下载和上传
这篇文章介绍了如何在Springboot和Vue中实现文件的上传和下载功能,包括后端控制器的创建、前端Vue组件的实现以及所需的依赖配置。
1136 0
【若依】 路由跳转并关闭当前tabs标签页
【若依】 路由跳转并关闭当前tabs标签页
1305 0
|
定位技术 API 数据格式
Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点
Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点
2497 0
|
人工智能 自然语言处理
阿里云logo设计智能生成(一键生成海量LOGO)
阿里云智能logo设计在线生成海量logo,logo可商用也可以申请商标,阿里云logo设计入口在哪里?阿里云开启了二级域名logo.aliyun.com,关于阿里云智能logo设计有多个入口链接,阿里云百科分享阿里云logo设计入口、价格及使用方法:
10266 108
阿里云logo设计智能生成(一键生成海量LOGO)

热门文章

最新文章