打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DataGridView内包含ComboBox列 实现选定ComboBox的项数据的联动.
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);
                    }

                }

            }

        }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DataGridView中的Combobox的应用
C#
WinForm控件复杂数据绑定常用数据源(如:Dictionary)(对Combobox,DataGridView等控件DataSource赋值的多种方法)
combobox的值返回System.Data.DataRowView的解决方法
13.02.16 DataGridView 用法集萃
ComboBox
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服