YBoy 發表於 2010-9-1 19:16:08

DataGridView內包含ComboBox列 實現選定ComboBox的項資料的聯動.

首先要綁定 ComboBox 然後綁定DataGridView
             DataSet dsProp = new DataSet();
             DataSet dsCond = new DataSet();
             DataSet dsCond1 = new DataSet();
             DataSet dsCond2 = new DataSet();
            try
            {
                dsProp = App.DbService.GetStandardControlProp(intPrjCode, intStationId, intModuleId, intPointId);
                dsCond = App.DbService.GetStandardControlCond(intPrjCode,intStationId, intModuleId,1);
                dsCond1 = App.DbService.GetStandardControlCond(intPrjCode, intStationId, intModuleId, 2);
                dsCond2 = App.DbService.GetStandardControlCond(intPrjCode, intStationId, intModuleId, 3);
                dsStationInfo = App.DbService.getStationNameDs(intPrjCode);
               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (dsProp == null || dsCond==null)
            {
                MessageBox.Show("數據載入失敗!");
                return;
            }
                        
            DataRow drNew = dsStationInfo.Tables.NewRow();
            drNew["stationid"] = System.DBNull.Value;
            drNew["stationnm"] = System.DBNull.Value;
            dsStationInfo.Tables.Rows.InsertAt(drNew, 0);
            StationID.DataSource = dsStationInfo.Tables;
            StationID.DisplayMember = "STATIONNM";
            StationID.ValueMember = "STATIONID";
            MODULEID.DataSource = dsCond.Tables;
            MODULEID.DisplayMember = "MODULEID";
            MODULEID.ValueMember = "MODULEID";
            POINTNM.DataSource = dsCond.Tables;
            POINTNM.DisplayMember = "POINTNAME";
            POINTNM.ValueMember = "POINTID";
            StationID2.DataSource = dsStationInfo.Tables;
            StationID2.DisplayMember = "STATIONNM";
            StationID2.ValueMember = "STATIONID";
            MODULENM2.DataSource = dsCond1.Tables;
            MODULENM2.DisplayMember = "MODULEID";
            MODULENM2.ValueMember = "MODULEID";
            POINTNM2.DataSource = dsCond1.Tables;
            POINTNM2.DisplayMember = "POINTNAME";
            POINTNM2.ValueMember = "POINTID";
            StationID3.DataSource = dsStationInfo.Tables;
            StationID3.DisplayMember = "STATIONNM";
            StationID3.ValueMember = "STATIONID";
            MODULENM3.DataSource = dsCond2.Tables;
            MODULENM3.DisplayMember = "MODULEID";
            MODULENM3.ValueMember = "MODULEID";
            POINTNM3.DataSource = dsCond2.Tables;
            POINTNM3.DisplayMember = "POINTNAME";
            POINTNM3.ValueMember = "POINTID";
            
            dgvList.DataSource = InitDT(dsCond.Tables.Copy(), 10, 0);
            dgvList2.DataSource = InitDT(dsCond1.Tables.Copy(), 7, 0);
            dgvList3.DataSource = InitDT(dsCond2.Tables.Copy(), 7, 1);
注意設定ComboBox的屬性:DataPropertyName ,然後調用CellValueChanged事件,此事件主要完成在選定ComboBox時重新綁定要改變的ComboBox.
private void dgvList_CellValueChanged(object sender, DataGridViewCellEventArgs e)
      {
            dgvCellAutoSetValue(e, dgvList);
      }private void dgvCellAutoSetValue(DataGridViewCellEventArgs e, DataGridView dgv)
      {
            if (e.ColumnIndex == 1)
            {
                if (e.RowIndex > -1)
                {
                  if (dgv.Rows.Cells.Value == System.DBNull.Value)
                  {
                        return;
                  }
                  DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgv.Rows.Cells;
                  try
                  {
                        DataTable DtModule = App.DbService.GetModuleIDInfo(intPrjCode, Convert.ToInt16(dgv.Rows.Cells.Value)).Tables;
                        if (DtModule.Rows.Count > 0)
                        {
                            cell.DataSource = DtModule;
                           
                            cell.DisplayMember = "MODULEID";
                            cell.ValueMember = "MODULEID";
                            if (cell.Items.Count > 0)
                            {
                              cell.Value = ((DataRowView)cell.Items).Row;
                            }
                        }
                  }
                  catch (Exception ex)
                  {
                        MessageBox.Show(ex.Message);
                  }
                }
            }
            else if (e.ColumnIndex == 2)
            {
                if (e.RowIndex > -1)
                {
                  if (dgv.Rows.Cells.Value == System.DBNull.Value || dgv.Rows.Cells.Value==DBNull.Value)
                  {
                        return;
                  }
                  int stationid = Convert.ToInt16(dgv.Rows.Cells.Value);
                  int moduleid = Convert.ToInt16(dgv.Rows.Cells.Value);
                  DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgv.Rows.Cells;
                  try
                  {
                        DataTable DtPoint = App.DbService.GetPointInfo(intPrjCode, stationid, moduleid).Tables;
                        if (DtPoint.Rows.Count > 0)
                        {
                            cell.DataSource = DtPoint;
                            cell.DisplayMember = "POINTNAME";
                            cell.ValueMember = "POINTID";
                            if (cell.Items.Count > 0)
                            {
                              cell.Value = ((DataRowView)cell.Items).Row;
                            }
                        }
                  }
                  catch (Exception ex)
                  {
                        MessageBox.Show(ex.Message);
                  }
                }
            }
      }

頁: [1]
查看完整版本: DataGridView內包含ComboBox列 實現選定ComboBox的項資料的聯動.