Quantcast
Viewing all articles
Browse latest Browse all 12583

cascading of combobox in datagridview in winform

need help!! cascading of combo box in grid view,the code below is working perfect but i want cascading combo boxes to get the value from sql table and do selection according to that not the value I've provided in filter by cell load event......help in out in filter by cell load event to get the value directly from sql tables

regards
Osama aftab

public class ViewData
    {
        private int m_Region;
        private int m_Territory;

        public ViewData(int Region, int Territory)
        {
            m_Region = Region;
            m_Territory = Territory;
        }

        public int RegionID
        {
            get { return m_Region; }
            set { m_Region = value; }
        }

        public int TerritoryID
        {
            get { return m_Territory; }
            set { m_Territory = value; }
        }
    }

 

// code in Form1.cs

public partial class Form1: Form
    {
        public List<ViewData> m_DataList;

        DataSet RegionsTerritories = new DataSet();
        DataTable regiontable = new DataTable("RegionTable");
        DataTable territorytable = new DataTable("TerritoryTable");
        BindingSource parentBS = new BindingSource();
        BindingSource childBS = new BindingSource();
        BindingSource filteredChildBS = new BindingSource();
                   
        public FilterByCell()
        {
            InitializeComponent();           
            this.Load += new EventHandler(FilterByCell_Load);
            this.dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
            this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
            this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError);
        }

        void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            if (e.ColumnIndex != territoryComboBoxColumn.Index)
            {
                MessageBox.Show("Data error occurs:" + e.Exception.Message);
            }
        }      

        void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {          
            if (this.dataGridView1.CurrentCell.ColumnIndex == territoryComboBoxColumn.Index)
            {
                DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl;
                BindingSource bs = control.DataSource as BindingSource;
                if (bs != null)
                {                  
                    // set the filteredChildBS as the DataSource of the editing control
                    (e.Control as ComboBox).DataSource = filteredChildBS;                   

                    object regionvalue = this.dataGridView1.Rows[this.dataGridView1.CurrentCell.RowIndex].Cells[regionComboBoxColumn.Index].Value;
                    if (regionvalue == DBNull.Value || regionvalue == null)
                    {
                        filteredChildBS.Filter = "RegionID=-1";
                    }
                    else
                    {
                        filteredChildBS.Filter = "RegionID=" + regionvalue.ToString();
                    }
                    // set the SelectedValue property of the editing control
                    if (this.dataGridView1.CurrentCell.Value != DBNull.Value && this.dataGridView1.CurrentCell.Value != null)
                    {                      
                        control.SelectedValue = this.dataGridView1.CurrentCell.Value;                                   
                    }
                }
            }
        }

        void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == regionComboBoxColumn.Index)
            {
                // clear the cell value of the territory column in the same row
                if (this.dataGridView1.DataSource.GetType() == typeof(DataTable))
                {
                    this.dataGridView1.Rows[e.RowIndex].Cells[territoryComboBoxColumn.Index].Value = DBNull.Value;
                }
                else
                {
                    this.dataGridView1.Rows[e.RowIndex].Cells[territoryComboBoxColumn.Index].Value = null;
                }
            }
        }
      
        void FilterByCell_Load(object sender, EventArgs e)
        {
            // add columns in the Region table         
            DataColumn col = new DataColumn("RegionID", typeof(int));
            regiontable.Columns.Add(col);
            col = new DataColumn("RegionDescription");
            regiontable.Columns.Add(col);

            // add columns in the Territory table
            col = new DataColumn("TerritoryID", typeof(int));
            territorytable.Columns.Add(col);
            col = new DataColumn("TerritoryDescription");
            territorytable.Columns.Add(col);
            col = new DataColumn("RegionID", typeof(int));
            territorytable.Columns.Add(col);

            // add the two tables to the dataset
            RegionsTerritories.Tables.Add(regiontable);
            RegionsTerritories.Tables.Add(territorytable);

            // add some rows in the region table
            DataRow row = RegionsTerritories.Tables["RegionTable"].NewRow();
            row[0] = 3;
            row[1] = "region 3";
            RegionsTerritories.Tables["RegionTable"].Rows.Add(row);

            row = RegionsTerritories.Tables["RegionTable"].NewRow();
            row[0] = 2;
            row[1] = "region 2";
            RegionsTerritories.Tables["RegionTable"].Rows.Add(row);

            // add some rows in the Territory table
            row = RegionsTerritories.Tables["TerritoryTable"].NewRow();
            row[0] = 44122;
            row[1] = "terri 44122";
            row[2] = 3;
            RegionsTerritories.Tables["TerritoryTable"].Rows.Add(row);

            row = RegionsTerritories.Tables["TerritoryTable"].NewRow();
            row[0] = 53404;
            row[1] = "terri 53404";
            row[2] = 3;
            RegionsTerritories.Tables["TerritoryTable"].Rows.Add(row);

            row = RegionsTerritories.Tables["TerritoryTable"].NewRow();
            row[1] = "terri 60601";
            row[2] = 2;
            row[0] = 60601;
            RegionsTerritories.Tables["TerritoryTable"].Rows.Add(row);

            row = RegionsTerritories.Tables["TerritoryTable"].NewRow();
            row[0] = 94105;
            row[1] = "terri 94105";
            row[2] = 2;
            RegionsTerritories.Tables["TerritoryTable"].Rows.Add(row);          

            // set up ParentBS and ChildBS and filteredChildBS
            parentBS.DataSource = RegionsTerritories;
            parentBS.DataMember = "RegionTable";

            childBS.DataSource = RegionsTerritories;
            childBS.DataMember = "TerritoryTable";

            filteredChildBS.DataSource = RegionsTerritories;
            filteredChildBS.DataMember = "TerritoryTable";

            // bind the regionComboBoxColumn to the parentBS
            this.regionComboBoxColumn.DataSource = parentBS;
            this.regionComboBoxColumn.DisplayMember = "RegionDescription";
            this.regionComboBoxColumn.ValueMember = "RegionID";

            // bind the territoryComboBoxColumn to the childBS
            this.territoryComboBoxColumn.DataSource = childBS;
            this.territoryComboBoxColumn.DisplayMember = "TerritoryDescription";
            this.territoryComboBoxColumn.ValueMember = "TerritoryID";

            // Bound to a datatable
            DataTable dtViewData = new DataTable("ViewData");
            dtViewData.Columns.Add("RegionID", typeof(Int32));
            dtViewData.Columns.Add("TerritoryID", typeof(Int32));
            DataRow dr = dtViewData.NewRow();
            dr["RegionID"] = 3;
            dr["TerritoryID"] = 44122;
            dtViewData.Rows.Add(dr);
            dr = dtViewData.NewRow();
            dr["RegionID"] = 2;
            dr["TerritoryID"] = 60601;
            dtViewData.Rows.Add(dr);

            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = dtViewData;
            dataGridView1.Columns[0].DataPropertyName = "RegionID";
            dataGridView1.Columns[1].DataPropertyName = "TerritoryID";

         }     
    }


Viewing all articles
Browse latest Browse all 12583

Trending Articles