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

本章既为续章,说明我以前写过,是的,以前我写过内部整个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

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

  1. CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)

    上一篇:CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三) 内容概要 本篇继续上一篇内容,本节介绍所有取值与赋值的相关操作. 1:原生:像操作Row一样 2:扩展:对UI操 ...

  2. CYQ.Data 轻量数据层之路 使用篇五曲 MProc 存储过程与SQL(十六)

    上一篇:CYQ.Data 轻量数据层之路 使用篇四曲 MAction 增删改(十五) 本篇内容概要 本篇继续上一篇内容,本节介绍MProc 类的相关操作. 1:MProc 存储过程操作 2:MProc ...

  3. CYQ.Data 轻量数据层之路 V2.0 震撼惊世 支持多数据库/内置Aop(二十五)

    所有文章索引:CYQ.Data 轻量数据层之路 框架开源系列 索引 前言: 从V1.5发布到现在时隔20天了,终于发布2.0版本了,2.0系列版本由于引入多数据库支持,内部结构改动较大. 但是外面调用 ...

  4. CYQ.Data 轻量数据层之路 使用篇-辅助工具枚举生成器 视频 C (二十)

    说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 优雅V1.4 辅助工具(十)   的附加视频教程. 本次视频介绍了使用工具创建存储过程/生成日志表/生成枚举文件等相关操作,同时以示例实 ...

  5. CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四)

    CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四) 说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值 ...

  6. CYQ.Data 轻量数据层之路

    CYQ.Data 轻量数据层之路 即时通讯软件 其实本来是不想写使用帮助的,因为在以下的文章中,都有大量的示例存在: CYQ.Data 轻量数据层之路 应用示例一 留言版(四) CYQ.Data 轻量 ...

  7. CYQ.Data 轻量数据层之路 应用示例一 留言版(四)

    继上篇:CYQ.Data 轻量数据层之路 继续狂热升级(三)之后,本篇要进入应用示例介绍使用了: 为了使一篇文章就能介绍完整个示例,我选用了简单的:登陆+注册+留言版本功能,来一步一步介绍如何使用的: ...

  8. CYQ.Data 轻量数据层之路 使用篇-MAction 数据查询 视频 D (二十一)

    2019独角兽企业重金招聘Python工程师标准>>> 说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三)   的附加视频教 ...

  9. CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)

    前言: 继正式发布V2.0到现在,已30来天了,一直静悄悄的都没发布什么版本 中间仅有插播了一下:CYQ.Data 轻量数据层之路 V2.5 抢先体验版本功能说明演示 (二十九) 只因最近花了很多时间 ...

最新文章

  1. 使用ajax方法实现form表单的提交
  2. 「SVN」Linux下svn命令使用的实践,个人记录~=傻瓜教程
  3. log4j中用变量配置日志输出文件位置
  4. sql datetime比较大小_SQL做题小技巧
  5. CF1379F1 Chess Strikes Back (easy version)(鸽笼原理、线段树)
  6. 【转】页(page),用户控件(userControl),窗口(window)区别
  7. 动图:程序员才懂的这些!
  8. Qt creator5.7 OpenCV249之图片灰度处理(含源码下载)
  9. 我的INI 配置文件读写动态库
  10. anaconda卸载tensorflow时,收集不到包的解决方法
  11. python os.system(cls)没反应_这真的是全宇宙最简单的Python安装方式了
  12. windows解压jar文件
  13. 如何下载矢量电子地图(OpenStreetMap)
  14. KYLO的数据库知识总结
  15. Mybatis 中事务提交方式
  16. java学习第114天,p699-706(05/12),完成QQ群发
  17. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
  18. vscode ubuntu 环境下ssh 远程连接 不稳定 重新打开
  19. 如何更好的设计网页配色
  20. spark运行出现py4j.protocol.Py4JError异常

热门文章

  1. python history函数_python的history_n 和history函数 获取的成交量和持仓量出现翻倍
  2. 拉普拉斯时域卷积定理_如何证明频域卷积定理
  3. mysql 联合索引 性能_mysql:联合索引及优化
  4. centos 使用java_如何在CentOS 8上安装Java
  5. django oracle 性能,4.利用Django在前端展示Oracle 状态趋势
  6. fpgrowth算法实战 mlib_【spark】41.Spark Mlib:FPGrowth算法
  7. linux nfs spec,创建 NFS Ubuntu Linux 服务器卷 - Azure Kubernetes Service | Microsoft Docs
  8. aix服务器屏幕显示被锁住了,Exceed登录AIX远程桌面的问题
  9. java如何寻找main函数对应的类
  10. python去年软件排行_2017年编程语言排行榜,Python位居榜首(C语言需求最大)