Dev GridControl VS SeachLookUpEdit

爲了實現在 Dev GridControl 控件中,兩列都用seachlookUpEdit 編輯,並且這兩列需要聯動,實現效果如下

實現效果

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

namespace Dev10_2_8
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private List<Objectes> list = new List<Objectes>();

        private List<SeachLookUpEditData> SLEPLIST = new List<SeachLookUpEditData>();

        private List<SeachLookUpEditData> SLESLIST = new List<SeachLookUpEditData>();

        private void Form4_Load(object sender, EventArgs e)
        {
            Init();
        }

        public void Init()
        {
            #region 構建基礎測試數據

            list.Add(new Objectes
            {
                ID = "1",
                NAME = "張三",
                CLASSP = "a",
                CLASSSON = "a1"
            });

            list.Add(new Objectes
            {
                ID = "2",
                NAME = "李四",
                CLASSP = "b",
                CLASSSON = "b1"
            });

            #endregion

            #region 構建SeachLookUpedit 數據源

            SLEPLIST.Add(new SeachLookUpEditData
            {
                ID = "a",
                NAME = "父節點A",
                PID = "0"
            });

            SLEPLIST.Add(new SeachLookUpEditData
            {
                ID = "b",
                NAME = "父節點B",
                PID = "0"
            });

            SLESLIST.Add(new SeachLookUpEditData
            {
                ID = "a1",
                NAME = "子節點A1",
                PID = "a"
            });

            SLESLIST.Add(new SeachLookUpEditData
            {
                ID = "a2",
                NAME = "子節點A2",
                PID = "a"
            });

            SLESLIST.Add(new SeachLookUpEditData
            {
                ID = "b1",
                NAME = "子節點B1",
                PID = "b"
            });

            SLESLIST.Add(new SeachLookUpEditData
            {
                ID = "b2",
                NAME = "子節點B2",
                PID = "b"
            });

            #endregion

            #region 綁定

            this.repositoryItemSearchLookUpEdit1.DataSource = SLEPLIST;

            this.repositoryItemSearchLookUpEdit2.DataSource = SLESLIST;

            this.gridControl1.DataSource = list;

            #endregion
        }

        /// <summary>
        /// 關鍵方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gridView1_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
        {
            if (e.Column.FieldName == "CLASSSON")
            {
                object oid = gridView1.GetFocusedRowCellValue("CLASSP");

                if (oid == null) return;

                string Pid = oid.ToString();

                RepositoryItemSearchLookUpEdit lookup = ReturnLook(Pid);

                e.RepositoryItem = lookup;
            }
        }

        /// <summary>
        /// 生產控件
        /// </summary>
        /// <param name="Pid"></param>
        /// <returns></returns>
        private RepositoryItemSearchLookUpEdit ReturnLook(string Pid)
        {
            var list = SLESLIST.Where(p => p.PID == Pid).ToList();

            RepositoryItemSearchLookUpEdit obj = new RepositoryItemSearchLookUpEdit
            {
                ValueMember = "ID",

                DisplayMember = "NAME",

                DataSource = list
            };

            return obj;
        }

        /// <summary>
        /// 防止選擇完父節點後,對應的子節點字段與父節點字段衝突 比如 選擇的父節點是b,但是這個時候子節點還是 a的子節點。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void repositoryItemSearchLookUpEdit1_EditValueChanged(object sender, EventArgs e)
        {
            var val = ((DevExpress.XtraEditors.BaseEdit)sender).EditValue;

            if (val != null)
            {
                object Sid = gridView1.GetFocusedRowCellValue("CLASSSON");

                var list = SLESLIST.Where(p => p.PID == val.ToString() && p.ID == Sid.ToString()).ToList();

                if (list.Count == 0)
                {
                    gridView1.SetFocusedRowCellValue("CLASSSON", null);
                }
            }
        }
    }

    public class Objectes
    {
        public string ID { get; set; }

        public string NAME { get; set; }

        public string CLASSP { get; set; }

        public string CLASSSON { get; set; }
    }

    public class SeachLookUpEditData
    {
        public string ID { get; set; }

        public string NAME { get; set; }

        public string PID { get; set; }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章