DevExpress GridControl 控件二表连动

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Repository;

namespace Thread {
    public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm {
        private IList<Order> list = null;
        private IList<OrderGoods> orderGoods = null;
        public XtraForm1() {
            InitializeComponent();
            list = GetOrders();
            orderGoods = GetOrderGoods();
        }

        private IList<Order> GetOrders() {
            var list = new List<Order>();
            list.Add(new Order { OrderNo = "A001", Rearmk = "Rearmk1" });
            list.Add(new Order { OrderNo = "A002", Rearmk = "Rearmk2" });
            list.Add(new Order { OrderNo = "A003", Rearmk = "Rearmk3" });
            return list;
        }

        private IList<OrderGoods> GetOrderGoods() {
            var list = new List<OrderGoods>();
            list.Add(new OrderGoods { OrderNo = "A001", Qty = 1, GoodsNo = "G01" });
            list.Add(new OrderGoods { OrderNo = "A001", Qty = 2, GoodsNo = "G02" });
            list.Add(new OrderGoods { OrderNo = "A001", Qty = 3, GoodsNo = "G03" });

            list.Add(new OrderGoods { OrderNo = "A002", Qty = 4, GoodsNo = "G04" });
            list.Add(new OrderGoods { OrderNo = "A002", Qty = 5, GoodsNo = "G05" });
            list.Add(new OrderGoods { OrderNo = "A002", Qty = 6, GoodsNo = "G06" });

            list.Add(new OrderGoods { OrderNo = "A003", Qty = 7, GoodsNo = "G07" });
            list.Add(new OrderGoods { OrderNo = "A003", Qty = 8, GoodsNo = "G08" });
            list.Add(new OrderGoods { OrderNo = "A003", Qty = 9, GoodsNo = "G09" });

            return list;
        }

        private void XtraForm1_Load(object sender, EventArgs e) {
            this.gridControl1.DataSource = list;
        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) {

        }

        private void gridControl1_Click(object sender, EventArgs e) {
        }

        DataTable table;

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) {
            var order = gridView1.GetFocusedRow() as Order;
            table = GetOrderGoodsTable(order.OrderNo);
            this.gridControl2.DataSource = table;
        }

        private DataTable GetOrderGoodsTable(string gNo) {

            if (gNo == "A001") {
                table = new DataTable("CartonExTemp");
                table.Columns.Add(new DataColumn("GoodsNo", typeof(string)));
                table.Columns.Add(new DataColumn("X", typeof(int)));
                table.Columns.Add(new DataColumn("M", typeof(int)));
                table.Columns.Add(new DataColumn("L", typeof(int)));
                table.Rows.Add("G001", 1, 5, 6);
                table.Rows.Add("G002", 2, 7, 8);
                table.Rows.Add("G003", 3, 9, 10);
            }
            else if (gNo == "A002") {
                table = new DataTable("CartonExTemp");
                table.Columns.Add(new DataColumn("GoodsNo", typeof(string)));
                table.Columns.Add(new DataColumn("30", typeof(int)));
                table.Columns.Add(new DataColumn("31", typeof(int)));
                table.Rows.Add("G003", 1, 4);
                table.Rows.Add("G004", 2, 5);
                table.Rows.Add("G005", 3, 6);
            }
            else {

                table = new DataTable("CartonExTemp");
                table.Columns.Add(new DataColumn("GoodsNo", typeof(string)));
                table.Columns.Add(new DataColumn("30", typeof(int)));
                table.Columns.Add(new DataColumn("31", typeof(int)));
                table.Rows.Add("G003", 10, 40);
                table.Rows.Add("G004", 20, 50);
                table.Rows.Add("G005", 30, 60);
            }
            return table;
        }

        private void gridView2_DataSourceChanged(object sender, EventArgs e) {
            gridView2.Columns.Clear();
            foreach (DataColumn dc in table.Columns) {
                var gridColumn1 = gridView2.Columns.AddVisible(dc.ColumnName);
                if (dc.ColumnName == "GoodsNo") {
                    gridColumn1.Caption = "货号";
                    gridColumn1.OptionsColumn.AllowEdit = false;
                    gridColumn1.Width = 20;
                }
                else {
                    gridColumn1.ColumnEdit = new RepositoryItemSpinEdit();
                }
            }
            gridView2.BestFitColumns();
        }

    }


    public class Order {
        public string OrderNo { get; set; }
        public string Rearmk { get; set; }
    }

    public class OrderGoods {
        public string GoodsNo { get; set; }
        public int Qty { get; set; }
        public string OrderNo { get; set; }
    }
}

回车事件,转到下一可编辑的单元格

  private void gridView1_KeyDown(object sender, KeyEventArgs e) {
            GridView grid = sender as GridView;

            if (e.KeyCode == Keys.Enter) {
                int focusedRowHandle = grid.FocusedRowHandle;

                int index = GetNextIndex(grid);
                this.Text = string.Format("index={0},grid.FocusedColumn.VisibleIndex={1}", index, grid.FocusedColumn.VisibleIndex);
                if (index == grid.VisibleColumns.Count - 1) {
                    focusedRowHandle++;
                }
                BeginInvoke(new MethodInvoker(() => {
                    grid.FocusedRowHandle = focusedRowHandle;
                    grid.FocusedColumn = grid.VisibleColumns[index];
                    grid.ShowEditor();
                }));

            }
        }

posted @ 2015-12-30 23:19  Rain520  阅读(1036)  评论(0编辑  收藏  举报