CYQ.Data 轻量数据层之路 自定义MDataTable绑定续章(七)

    xiaoxiao2022-07-09  209

    本章起,将续章讲解整框架当初的设计思路:

    本章既为续章,说明我以前写过,是的,以前我写过内部整个MDataTable的构造,不过,当初匆匆写完后,

    最后一步的实现MDataTable绑定GridView/DataList/Repeater还差一点,这章续上!

    这里列出我以前写过的关于构造自定义MDataTable系列文章:

    备注:以下内容为早期所写,文字少,代码多,有不明之处,欢迎在文章后面留言!

     

    1:CYQ.Data 轻量数据访问层(二) 构造数据单元(上)

    2:CYQ.Data 轻量数据访问层(三) 构造数据单元(下)

    3:CYQ.Data 轻量数据访问层(四) 构造数据单元列

    4:CYQ.Data 轻量数据访问层(五) 构造数据行

    5:CYQ.Data 轻量数据访问层(六) 构造数据表

    6:CYQ.Data 轻量数据访问层(七) 自定义数据表实现绑定常用的数据控件(上)

    7:CYQ.Data 轻量数据访问层(八) 自定义数据表实现绑定常用的数据控件(中)

    8:CYQ.Data 轻量数据访问层(九) 自定义数据表实现绑定常用的数据控件(下)

     

    在写完第八篇(九)之后,我们的测试结果里,并没有完成绑定功能,我们来看一下测试代码:

                MDataTable table = new  MDataTable( " myTableName " );             table.Columns.Add( "Url " , SqlDbType.NVarChar);             table.Columns.Add( "Name " ,SqlDbType.NVarChar);             MDataRow mdr  =  table.NewRow();             mdr[ 0 ].Value  =   " http://cyq1162.cnblogs.com/ " ;             mdr[ 1 ].Value  =   " 路过秋天 " ;             table.Rows.Add(mdr);             GridView1.DataSource  =  table;             GridView1.DataBind();

     

    我们像普通的DataTable一样,添加了两列,然后对列赋值:

    我们看一下测试的结果:

    很明显,绑定的结果乱七杂八,不是我们想要的。 

     

    经过代码对比,发现,我们的MDataRow得实现IDataRecord接口才行,于是,让IDataRecord继承接口,并实现:

    public   class  MDataRow : List < MDataCell > , IDataRecord     {         ///  ...省略N行已有代码...          #region  IDataRecord 成员          int  IDataRecord.FieldCount         {              get             {                  return   base .Count;             }         }          bool  IDataRecord.GetBoolean( int  i)         {              return  ( bool ) this [i].Value;         }          byte  IDataRecord.GetByte( int  i)         {              return  ( byte ) this [i].Value;         }          long  IDataRecord.GetBytes( int  i,  long  fieldOffset,  byte [] buffer,  int  bufferoffset,  int  length)         {              throw   new  Exception( " The method or operation is not implemented. " );         }          char  IDataRecord.GetChar( int  i)         {              return  ( char ) this [i].Value;         }          long  IDataRecord.GetChars( int  i,  long  fieldoffset,  char [] buffer,  int  bufferoffset,  int  length)         {              return  ( long ) this [i].Value;         }         IDataReader IDataRecord.GetData( int  i)         {              throw   new  Exception( " The method or operation is not implemented. " );         }          string  IDataRecord.GetDataTypeName( int  i)         {              return  ( string ) this [i].Value;         }         DateTime IDataRecord.GetDateTime( int  i)         {              return  (DateTime) this [i].Value;         }          decimal  IDataRecord.GetDecimal( int  i)         {              return  ( decimal ) this [i].Value;         }          double  IDataRecord.GetDouble( int  i)         {              return  ( double ) this [i].Value;         }         Type IDataRecord.GetFieldType( int  i)         {              return   this [i].Value.GetType();         }          float  IDataRecord.GetFloat( int  i)         {              return  ( float ) this [i].Value;         }         Guid IDataRecord.GetGuid( int  i)         {              return  (Guid) this [i].Value;         }          short  IDataRecord.GetInt16( int  i)         {              return  ( short ) this [i].Value;         }          int  IDataRecord.GetInt32( int  i)         {              return  ( int ) this [i].Value;         }          long  IDataRecord.GetInt64( int  i)         {              return  ( long ) this [i].Value;         }          string  IDataRecord.GetName( int  i)         {              return  ( string ) this [i].Value;         }          int  IDataRecord.GetOrdinal( string  name)         {              return  ( int ) this [name].Value;         }          string  IDataRecord.GetString( int  i)         {              return  ( string ) this [i].Value;         }          object  IDataRecord.GetValue( int  i)         {              return   this [i].Value;         }          int  IDataRecord.GetValues( object [] values)         {              return   0 ;         }          bool  IDataRecord.IsDBNull( int  i)         {              return   this [i].Value  ==  DBNull.Value;         }          object  IDataRecord. this [ string  name]         {              get             {                  return   this [name].Value;             }         }          object  IDataRecord. this [ int  i]         {              get             {                  return   this [i].Value;             }         }          #endregion     }

     

    接着浏览了一下,不见啥效果。

     

    于是又对比了一下代码,发现原来的MDataTable是采用继承方式List<MDataRow>,

    于是,把它给弄到下面来了:

      public   class  MDataTable : IDataReader, IEnumerable     {          private  List < MDataRow >  _Mdr;          public  List < MDataRow >  Rows         {              get             {                  return  _Mdr;             }         }       // ...下面省略N行... }

     

     

    接着小调整了一下,再次浏览,终于效果出来了:

     

     

     

    至此,整个框架三部分中自定义MDataTable系列,就到此结束了。

     

     

    备注:完整框架源码会在本系列结束之后另开章节发布,暂时望勿激动,学习思想才是重要的。

    如果在学习过程中发现有什么问题,欢迎留言!

    版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

    http://www.cnblogs.com/cyq1162/archive/2010/08/24/1806300.html

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)