zoukankan      html  css  js  c++  java
  • Linq中使用反射实现--LINQ通用数据表绑定DataGrid控件的方法(原创)

    项目需求,因为项目中存在很多表,这些表的内容需要呈现给客户浏览.转载请注明出处

    相信很多写过程序的设计者很容易的用以下方式实现

    在SqlConnect ,DataSet 的方式,我们很轻松的可以通过Sql的字符变化来实现单表动态查询

    string sTableName="Dep";
    
    string connectionstr="连接字符串";
    
    Sql ="select * from "+sTableName;
    
    SqlConnection conn=new SqlConnection();
    
    conn.ConnectionString = _ConnectionString;
    
    conn.open();
    
    SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
    
    DataSet ds=new DataSet();
    
    adapter.Fill(ds);
    
    //绑定数据
    
     this.GridControl.DataSource=ds.Tables[0];
    
    ....

    以上都是书本上很经典的范例,我就不详细列出

     在开发Linq项目过程中,需要对一个表的数据进行查询,通常Linq的语法一般是这样:

    DataClass1DataContext context=new DataClass1DataContext();
    
    System .Data.Linq.Table<Dep> dt=context.GetTable<dep>();//重复写这句
    
    //绑定数据
    
     this.GridControl.DataSource=dt;

    按照上面的做法.每次使用不用的表,我们必须重复的写以上的代码,从软件设计的角度出发,这些很多时候是无用的操作.

    经过不断地测试,通过反射的方法可以实现动态表查询

    如果表名发生变化,则我们不能直接实现<TableName>来实现

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void simpleButton1_Click(object sender, EventArgs e)
            {
                getLinqCommonTable("DepartmentShip");

    getLinqCommonTable("DepartmentShip"," OID=2");
    
    
            }
    
    
            /// <summary>
            /// 通过动态字符串获取单表数据
            /// </summary>
            private void getLinqCommonTable(string sTableName)
            {
                ArrayList list = new ArrayList();
                DataClasses1DataContext Context = new DataClasses1DataContext();
                string sNamespace = new DataClasses1DataContext().GetType().Namespace;
                Type t = Type.GetType(String.Format("{0}.{1}", sNamespace, sTableName), true, true);
                var temp = Activator.CreateInstance(t);
             
                var q = Context.ExecuteQuery(typeof(DepartmentShip), "select * from DepartmentShip");
                foreach (object c in q)
                {
                    list.Add(c);
                    Console.WriteLine(c);
                }
                gridControl1.DataSource = list;
                gridControl1.Refresh();
            }
            /// <summary>
            /// 通过动态字符串获取单表数据
            /// </summary>
            private void getLinqCommonTable(string sTableName,string condition)
            {
                ArrayList list = new ArrayList();
                DataClasses1DataContext Context = new DataClasses1DataContext();
                string sNamespace = new DataClasses1DataContext().GetType().Namespace;
                Type t = Type.GetType(String.Format("{0}.{1}", sNamespace, sTableName), true, true);
                var temp = Activator.CreateInstance(t);
                var q = Context.ExecuteQuery(temp.GetType(), "select * from DepartmentShip where "+condition);
                foreach (object c in q)
                {
                    list.Add(c);
                    Console.WriteLine(c);
                }
                gridControl1.DataSource = list;
                gridControl1.Refresh();
            }
          
        }

    通过上述代码我们可以实现LINQ单表通过查询方法

  • 相关阅读:
    记一次proc_open没有开启心得感悟
    Nginx 502 Bad Gateway 的错误的解决方案
    Linux安装redis,启动配置不生效(指定启动加载配置文件)
    设置redis访问密码
    LNMP 多版本PHP同时运行
    ***总结:在linux下连接redis并进行命令行操作(设置redis密码)
    设计模式(一)单例模式:3-静态内部类模式(Holder)
    设计模式(一)单例模式:2-懒汉模式(Lazy)
    设计模式(一)单例模式:1-饿汉模式(Eager)
    设计模式(一)单例模式:概述
  • 原文地址:https://www.cnblogs.com/meetweb/p/3326403.html
Copyright © 2011-2022 走看看