datagridview中使用DataGridViewComboBoxColumn

Posted sunping177

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datagridview中使用DataGridViewComboBoxColumn相关的知识,希望对你有一定的参考价值。

在datagridview中使用自带的DataGridViewComboBoxColumn,加载数据库中的数据,选中和保存所需要的数据
实现效果如图
加载数据库已保存的数

选择自己所需要的数据

具体代码如下
datagridview命名为:dgvDrugList
添加基本列及对应的设计名等,如下图

datagridview的EditMode设置为EditOnEnter
代码如下
窗体事件添加一个方法

 private void DrugMaintainFrm_Load(object sender, EventArgs e)
        
            try
            
                dbInfo = new DbInfo();
                // initDisp();//显示数据
                initFrm(); //初始化界面
            
            catch (Exception ex)
            
                Error.ErrProc(ex);
            

        

方法具体代码

  #region 数据初始化


        /// <summary>
        /// 将窗体数据显示到各个控件
        /// </summary>
        private void initFrm()
        
            dsWord = GetWordIDList();//用药途径
            dsFreq = dbInfo.GetTableData("PERFORM_FREQ_DICT", string.Empty);
            //用药途径下拉列表
            dsWord.Tables[0].DefaultView.Sort = "Id";
            DataGridViewComboBoxColumn cbxColumn = (DataGridViewComboBoxColumn)dgvDrugList.Columns["wordid"];
            cbxColumn.DataSource = dsWord.Tables[0].DefaultView;
            cbxColumn.DisplayMember = "DESCRIBE";
            cbxColumn.ValueMember = "Id";
            // 频次下拉列表         
            DataGridViewComboBoxColumn cbxColumn1 = (DataGridViewComboBoxColumn)dgvDrugList.Columns["freq_desc"];
            cbxColumn1.DataSource = dsFreq.Tables[0].DefaultView;
            cbxColumn1.DisplayMember = "freq_desc";
            cbxColumn1.ValueMember = "freq_desc";


            string sql = string.Format(@"select  b.class_name,a.*
from drug_dict a ,drug_class_dict b
where a.community_code='0'
and a.drug_class=b.class_code and a.community_code=b.community_code", GVars.CommunityCode);
            dsDrugList = dbInfo.GetData(sql, "drug_dict");
            dgvDrugList.AutoGenerateColumns = false;//去掉自动增加列
            dgvDrugList.DataSource = dsDrugList.Tables[0].DefaultView;

        
        /// <summary>
        /// 用药途径
        /// </summary>
        private DataSet GetWordIDList()
        
            string wordSql = string.Format(@"select a.Id,a.DESCRIBE
from dict_word a,dict_category b
where a.category_id=b.id
  and b.code='ADMINISTRATION_DICT'");
            DataSet dswordList = dbInfo.GetData(wordSql, "dict_word");
            return dswordList;

        
        /// <summary>
        /// 执行频次
        /// </summary>
        private DataSet GetWFREQList()
        
            string freqSql = string.Format(@"select serial_no,freq_desc from PERFORM_FREQ_DICT ");
            DataSet dsfreqList = dbInfo.GetData(freqSql, "PERFORM_FREQ_DICT");
            return dsfreqList;

        
        #endregion

点击保存事件对选中后的信息进行保存

  private void btnSave_Click(object sender, EventArgs e)
        
            try
            
                this.Validate(); // 更新DB

                if (dsDrugList.HasChanges() == false)
                
                    GVars.Msg.Show("I0006");
                    return;
                
                dsDrugList.Tables[0].TableName = "drug_dict";
                dbInfo.SaveTableData(dsDrugList.GetChanges());
                dsDrugList.AcceptChanges();
                MessageBox.Show("保存成功!", "提示信息");
                //initDisp();
                initFrm();
            
            catch (Exception ex)
            
                MessageBox.Show(ex.ToString());
                //initDisp();
                initFrm();
                return;
            
        

以上是关于datagridview中使用DataGridViewComboBoxColumn的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两个datagridview行单元格的值?

添加行时 DataGridView 抛出“InvalidOperationException:操作无效...”

Datagridview 组合框为空

在不更改数据源的情况下过滤 DataGridView

winform中如何在点击datagridview的时候不让窗体的滚动条自动滚动

DataGridView使用技巧七:列顺序的调整操作行头列头的标题