分享

DataGridView内包含ComboBox列 实现选定ComboBox的项数据的联动.

 顺溜的书架 2014-10-25
2007-12-05 11:18 2437人阅读 评论(1) 收藏 举报

首先要绑定 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[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(), 100);
            dgvList2.DataSource 
= InitDT(dsCond1.Tables[0].Copy(), 70);
            dgvList3.DataSource 
= InitDT(dsCond2.Tables[0].Copy(), 71);

注意设定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[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);
                    }

                }

            }

        }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多