c# datagridview显示混合数据源(oracle sql及由oracle sql派生)

     此文源源于工作,TCBS中某个form展示的datagridview,其展示数据部分有些是直接来自oracle sql,而其它是源于oracle sql的派生数据源(通俗就是说:基于oracle sql的值,不是直接源于oracle sql);
   上述可能些绕,上个图片吧,便于理解:

//注:新加列是由前两列派生而来,不是直接源于oracle sql(存储过程或sql)
部门编号   部门名称  新加列  
1                  销售部           1销售部
2                  账务部           2账务部

我把这种情况称为datagridview列表视图的混合数据源

我的示例代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OracleClient;
using System.Collections;

namespace openfiledialog
{
    public partial class Form1 : Form
    {
        //spec及special为列表中非同直接oracle sql查询得到的数据源,而是由其转换来得到的数据源
        private string spec;
        public string special
        {
            get
            {
                return spec;
            }
        }
        public Form1()
        {
            InitializeComponent();
        }
        public DataSet ds1= new DataSet();
       
        private void Form1_Load(object sender, EventArgs e)
        {
            
            OracleConnection con1 = new OracleConnection("Data Source=orcl;User id=scott; Password=system;");//oracleconnection类隶属于命名空间system.data.oracleclient
            OracleCommand oc1 = new OracleCommand("select deptno,dname from dept", con1);
            OracleDataAdapter da1 = new OracleDataAdapter();
            da1.SelectCommand = oc1;
            da1.Fill(ds1);
            this.dataGridView1.DataSource = ds1.Tables[0];
            //通过它向datagridview添加一个datacolumn列,
            ds1.Tables[0].Columns.Add("special");
            //循环datagridview的每行datarow(此时datarow已变为三列,由原二列变为三列,新增列即由ds1.Tables[0].Columns.Add("special")添加而来
            foreach (DataRow dr in ds1.Tables[0].Rows)
            {
                //每条datarow要新加一个列哟,在原有数据库查询的基础上,借助属性实现
                //最终实现把经过转换后的列也添加到列表中来,不用bo类可以实现吗
                //this.Add(spec);
                //把新添加列到datatable中
                //为属性special对应的spec字段供值
                spec = dr["deptno"] + "新加列";
                //向datagridview的新增列special供值,注意:是以属性来供值的,而此属性special是在设计器中配置好的,datapropertyname配置为special
                //这样数据源就与属性关联,进而属性与字段关联;
                dr["special"] = special;


            }

            
        }
        
          

    }
}

代码运行结果:

小结:
    datagridview的数据源可以是联动数据源(直接或派生数据源),
   也就是说它的数据源可以是多次动态加工或复杂的组合而成的,不是我以前认为的就是从ORACLE 表或游标取出的数据;而是可以基于此数据进行复杂的处理,以此作为datagridview的数据源

               datagridview的每个datagridviewdatacolumn的列填充值是多种方式,在此我们是采用了属性,以前我多看到的直接的oracle sql的某个列











                

tototo.GIF

请使用浏览器的分享功能分享到微信等