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


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

    本章既为续章,说明我以前写过,是的,以前我写过内部整个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系列,就到此结束了。

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

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

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    玩转VIM编辑器额外技巧
    玩转VIM编辑器自动补全
    玩转VIM编辑器vim附加特性
    Silverlight 4 Tools中文版下载
    Silverlight4 入门GetStart
    Silverlight SNS项目
    Silverlight VS2010下的RIA开发活动整站
    Silverlight4(Visual Studio 2010下的RIA开发)技术交流会圆满结束
    SYSTECH的界面设计器
    实现自定义Silverlight的安装界面
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1806300.html
Copyright © 2020-2023  润新知