首先要綁定 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("數(shù)據(jù)加載失??!");
return;
}
DataRow drNew = dsStationInfo.Tables[0].NewRow();
drNew["stationid"] = System.DBNull.Value;
drNew["stationnm"] = System.DBNull.Value;
dsStationInfo.Tables[0].Rows.InsertAt(drNew, 0);

StationID.DataSource = dsStationInfo.Tables[0];
StationID.DisplayMember = "STATIONNM";
StationID.ValueMember = "STATIONID";
MODULEID.DataSource = dsCond.Tables[0];
MODULEID.DisplayMember = "MODULEID";
MODULEID.ValueMember = "MODULEID";
POINTNM.DataSource = dsCond.Tables[0];
POINTNM.DisplayMember = "POINTNAME";
POINTNM.ValueMember = "POINTID";

StationID2.DataSource = dsStationInfo.Tables[0];
StationID2.DisplayMember = "STATIONNM";
StationID2.ValueMember = "STATIONID";
MODULENM2.DataSource = dsCond1.Tables[0];
MODULENM2.DisplayMember = "MODULEID";
MODULENM2.ValueMember = "MODULEID";
POINTNM2.DataSource = dsCond1.Tables[0];
POINTNM2.DisplayMember = "POINTNAME";
POINTNM2.ValueMember = "POINTID";

StationID3.DataSource = dsStationInfo.Tables[0];
StationID3.DisplayMember = "STATIONNM";
StationID3.ValueMember = "STATIONID";
MODULENM3.DataSource = dsCond2.Tables[0];
MODULENM3.DisplayMember = "MODULEID";
MODULENM3.ValueMember = "MODULEID";
POINTNM3.DataSource = dsCond2.Tables[0];
POINTNM3.DisplayMember = "POINTNAME";
POINTNM3.ValueMember = "POINTID";
dgvList.DataSource = InitDT(dsCond.Tables[0].Copy(), 10, 0);
dgvList2.DataSource = InitDT(dsCond1.Tables[0].Copy(), 7, 0);
dgvList3.DataSource = InitDT(dsCond2.Tables[0].Copy(), 7, 1);

注意設(shè)定ComboBox的屬性:DataPropertyName ,然后調(diào)用CellValueChanged事件,此事件主要完成在選定ComboBox時(shí)重新綁定要改變的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[e.RowIndex].Cells[1].Value == System.DBNull.Value)
{
return;
}
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgv.Rows[e.RowIndex].Cells[2];
try
{
DataTable DtModule = App.DbService.GetModuleIDInfo(intPrjCode, Convert.ToInt16(dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)).Tables[0];
if (DtModule.Rows.Count > 0)
{
cell.DataSource = DtModule;
cell.DisplayMember = "MODULEID";
cell.ValueMember = "MODULEID";

if (cell.Items.Count > 0)
{
cell.Value = ((DataRowView)cell.Items[0]).Row[cell.ValueMember];
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
else if (e.ColumnIndex == 2)
{
if (e.RowIndex > -1)
{
if (dgv.Rows[e.RowIndex].Cells[2].Value == System.DBNull.Value || dgv.Rows[e.RowIndex].Cells[1].Value==DBNull.Value)
{
return;
}
int stationid = Convert.ToInt16(dgv.Rows[e.RowIndex].Cells[1].Value);
int moduleid = Convert.ToInt16(dgv.Rows[e.RowIndex].Cells[2].Value);
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgv.Rows[e.RowIndex].Cells[3];
try
{
DataTable DtPoint = App.DbService.GetPointInfo(intPrjCode, stationid, moduleid).Tables[0];
if (DtPoint.Rows.Count > 0)
{
cell.DataSource = DtPoint;
cell.DisplayMember = "POINTNAME";
cell.ValueMember = "POINTID";
if (cell.Items.Count > 0)
{
cell.Value = ((DataRowView)cell.Items[0]).Row[cell.ValueMember];
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}

|