创建自定义数据源

时间:2021-10-23 20:36:42
看到一则使用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