数据源转成IEnumerable类型

来源:互联网 发布:java swing 登录界面 编辑:程序博客网 时间:2024/06/13 01:54

//将数据源中的数据都转换为IEnumerable类型,用作数据绑定

//其中_dataSource为数据源,DataMember为要找的数据名称

  protected virtual IEnumerable GetDataSource()
  {
   
   if(_dataSource == null)
   {
    return null;
   }
   
   IEnumerable resolvedDataSource = _dataSource as IEnumerable;
   if(resolvedDataSource != null)
   {
    return resolvedDataSource;
   }

   IListSource listSource = _dataSource as IListSource;
   if(listSource != null)
   {
    IList memberList = listSource.GetList();
    
    int i = memberList.Count;
    
    if(listSource.ContainsListCollection == false)
    {
     return (IEnumerable)memberList;
    }

    ITypedList typedMemberList = memberList as ITypedList;
    if(typedMemberList != null)
    {
     PropertyDescriptorCollection propDescs = typedMemberList.GetItemProperties(new PropertyDescriptor[0]);
     PropertyDescriptor memberProperty = null;
     if((propDescs != null) && (propDescs.Count!=0))
     {
      string dataMember = DataMember;
      if(dataMember.Length == 0)
      {
       memberProperty = propDescs[0];
      }
      else
      {
       memberProperty = propDescs.Find(dataMember,true);
      }

      if(memberProperty != null)
      {
       object listRow = memberList[0];
       object list = memberProperty.GetValue(listRow);

       if(list is IEnumerable)
       {
        return (IEnumerable)list;
       }
      }
      throw new Exception("no Datamember.");
     }
     
     throw new Exception("no datamember.");
    }
   }
   return null;
  }

原创粉丝点击