GridControl主从表设置

来源:互联网 发布:先付款钱在淘宝上 编辑:程序博客网 时间:2024/05/17 06:23

GridControl主从表的设置有目前我知道有2种方法一种是使用datarelation,一直是在对象中增加Childs 的 list。说实话,一开始弄这个主从表都弄的头大了。由于是做项目,都是使用对象的。而且返回的都是Ilist!主从表关系都弄了几天,现在终于解决了,而且还知道怎么获取明细中的数据了!

首先使用对象中的关系来设置主表关系。

代码如下:以下是设置主从表,获取主表行,点击明细表行获取明细表行。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraGrid.Views.Base;
using System.Linq;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Views.Grid;

namespace test
{
    public partial class Form3 : Form
    {

        GridView gridviewdetail = new GridView();//由于明细表只有在运行时可见,所以我们要设定一个明细表以便获取明细表数据。
         
        public Form3()
        {
            InitializeComponent();//在界面上增加一个girdControl即可。

            InitGrid();  
        }
        private void InitGrid()
        {
             //模拟几个数据
           List<ClassNo> listDataSource2 = new List<ClassNo>();
            listDataSource2.Add (new ClassNo (1,1,"计算机班01","备注01"));
            listDataSource2.Add(new ClassNo(2, 2, "计算机班02", "备注02"));
            listDataSource2.Add(new ClassNo(3, 3, "计算机班03", "备注03"));
            listDataSource2.Add(new ClassNo(4, 1, "计算机班 ", "备注01"));


            List<Record> listDataSource = new List<Record>();
            listDataSource.Add(new Record(1, "张三", "男", Convert.ToDateTime("1989-5-6"), 115.5f, 101, 96, "", listDataSource2)); 

           //Record中有ClassNo对像,这样运行时明细就可见了。一定要是list,如果是IList就不能出现明细!!,如果是IList要将IList转为list才可以。

           listDataSource.Add(new Record(2, "李四", "女", Convert.ToDateTime("1987-12-23"), 92, 85, 87, "", listDataSource2));
            listDataSource.Add(new Record(3, "王五", "女", Convert.ToDateTime("1990-2-11"), 88, 69, 41.5f, "", listDataSource2));
            listDataSource.Add(new Record(4, "赵六", "男", Convert.ToDateTime("1988-9-1"), 119, 108, 110, "备注行", listDataSource2));
            //绑定数据源并显示
            gridControl1.DataSource = listDataSource;
        }

  
        private void gridView1_Click(object sender, EventArgs e) //获取行数据
        {
            int numnber = gridView1.FocusedRowHandle;
            object id = gridView1.GetRowCellValue(numnber, "ID");//获取record的ID。
        }

        private void gridView1_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)(此事件是打开明细后发生)
        {
            gridviewdetail= gridView1.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;//将明细的数据赋值gridviewdetail中

            gridviewdetail.OptionsBehavior.Editable = false;//gridviewdetail不可编辑即明显不可编辑

            gridviewdetail.Click += new System.EventHandler(this.gridview_Click);  //设置明细点击的事件当点击明细时发生的!我们用来获取明细数据!

          }

        private void gridview_Click(object sender, EventArgs e)
        {
            int numnber = gridviewdetail.FocusedRowHandle;
            object id = gridviewdetail.GetRowCellValue(numnber, "ID");//获取明细中的ID.
        }

 

#region 运行时绑定到实现Ilist接口的数据源Record


        public class Record
        {
            int id;
            DateTime birth;
            string name, sex, remark;
            float math, chinese, english;
            List<ClassNo> classnos;
            public Record(int id, string name, string sex, DateTime birth, float math, float chinese, float english, string remark, List<ClassNo> classnos)
            {
                this.id = id;
                this.name = name;
                this.sex = sex;
                this.birth = birth;
                this.math = math;
                this.chinese = chinese;
                this.english = english;
                this.remark = remark;
                this.classnos = classnos;
            }
            public int ID { get { return id; } }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public string Sex
            {
                get { return sex; }
                set { sex = value; }
            }
            public DateTime Birth
            {
                get { return birth; }
                set { birth = value; }
            }
            public float Math
            {
                get { return math; }
                set { math = value; }
            }
            public float Chinese
            {
                get { return chinese; }
                set { chinese = value; }
            }
            public float English
            {
                get { return english; }
                set { english = value; }
            }
            public string Remark
            {
                get { return remark; }
                set { remark = value; }
            }
            public List<ClassNo> GetClassNOs
            {
                get { return classnos; }
                set { classnos = value; }
            }


        }

        #endregion
        #region 运行时绑定到实现Ilist接口的数据源ClassNo,


        public class ClassNo
        {
            int id,recordId;

            string remark;
          

            public ClassNo(int id, int   recordId, string calssno, string remark)
            {
                this.id = id;
                this.recordId =recordId ;
                this.remark = remark;
            }
            public int ID { get { return id; } }
            public int RecordId
            {
                get { return recordId; }
                set { recordId = value; }
            }
        
            public string Remark
            {
                get { return remark; }
                set { remark = value; }
            }
           }

        #endregion


    }
}

 还有一种设置主从表关系的方法。使用datset

     

注:GridControl中包含了GridView 添加GridControl1

连接数据库:

string souce ="server=(local);Integrated Security=SSPI;database=dx";

SqlConnection conn =newSqlConnection(souce);

conn.Open();

string str ="select * from base_color";

string str2 ="select * from base_detail";

string str3 ="select * from base_three";

SqlDataAdapter da =newSqlDataAdapter(str, con);

SqlDataAdapter da2 =newSqlDataAdapter(str2, con);

SqlDataAdapter da3 =newSqlDataAdapter(str3, con);

DataSet ds =newDataSet();

a.Fill(ds, "color");

da2.Fill(ds, "detail");

da3.Fill(ds, "three");

 

DataRelation dr = new DataRelation("2层", ds.Tables["color"].Columns["id"],ds.Tables["detail"].Columns["color_no"]);

//设定关系,ds.color(). Id(字段)= ds.detail. color_no

DataRelation dr2 = new DataRelation("3层", ds.Tables["color"].Columns["id"],ds.Tables["three"].Columns["color_no"]);

DataRelation dr3 = new DataRelation("4层", ds.Tables["detail"].Columns["id"],ds.Tables["three"].Columns["color_no"]);

ds.Relations.Add(dr);

ds.Relations.Add(dr2);

ds.Relations.Add(dr3);

gridControl1.DataSource = ds.Tables[0];//设定主表

 

 

原创粉丝点击