作者:浮云 | 来源:互联网 | 2024-12-03 18:21
本文详细介绍如何在DataGridView中使用DataGridViewComboBoxColumn来加载、选择和保存数据库中的数据,提供具体的实现步骤和示例代码。
前言:本文旨在帮助开发者了解如何在.NET框架下的Windows Forms应用程序中,利用DataGridView控件中的DataGridViewComboBoxColumn功能,实现从数据库加载数据、用户选择以及数据保存的操作。通过本指南,您将能够更好地理解和应用这一技术,提升开发效率。
在Windows Forms应用程序中,DataGridView控件是一个非常强大的工具,用于显示和编辑表格数据。其中,DataGridViewComboBoxColumn允许用户从预定义的选项列表中选择值,这在处理需要从多个选项中选择数据的场景时特别有用。
### 实现步骤
1. **设置DataGridView**
- 首先,确保您的项目中已经添加了必要的引用,并且在Form上放置了一个DataGridView控件。
- 将DataGridView命名为`dgvDrugList`,并根据需求添加相应的列,包括一个DataGridViewComboBoxColumn用于展示下拉选项。
2. **配置ComboBoxColumn**
- 在Form的Load事件中,编写代码以初始化DataGridView。这包括设置数据源、显示成员和值成员。
- 例如,如果您有一个名为`wordid`的ComboBoxColumn,可以从数据库中获取数据并绑定到该列:
private void DrugMaintainFrm_Load(object sender, EventArgs e) { try { dbInfo = new DbInfo(); initFrm(); // 初始化界面 } catch (Exception ex) { Error.ErrProc(ex); } }
3. **数据初始化**
- 在`initFrm`方法中,加载用药途径和频次的数据,并将其绑定到对应的ComboBoxColumn上。
- 示例代码如下:
#region 数据初始化 /// /// 将窗体数据显示到各个控件 /// 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; } #endregion
4. **保存数据**
- 当用户完成数据选择后,可以通过点击“保存”按钮来提交更改。在按钮的Click事件中,编写代码以验证并保存数据。
- 示例代码如下:
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("保存成功!", "提示信息"); initFrm(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); initFrm(); return; } }