DataGridView中的ComboBox,相应地为每一行设置组合框的值 [英] ComboBox in DataGridView, setting the combo box's values accordingly to each row
问题描述
嘿所有,我有一个DataGridView控件和一个comboBox列。我设法从我的数据库填充comboBox的项目,但我不知道如何根据dataGridView中的行设置适当的值。
Hey all, I have a DataGridView control and a comboBox column. I managed to populate the comboBox's items from my database but I dont know how to set the appropriate value to it according to its row in the dataGridView.
我的问题的一些更多解释:
dataGridView代表一个Patient表,每个患者都有一个联系人,我正在通过一个联系人显示这个联系人组合框。每位患者都有一个ContactID字段,告诉哪个联系人属于该患者。所以我希望dataGridView中的每一行都将comboBox的valueMemeber字段设置为该行的ContacID字段。
表格是:
患者(PID,姓名,电话, ContactID )< - DataGridView代表此表
Patients(PID,name,phone,ContactID) <-- The DataGridView represents this table
联系人( CID ,姓名,电话)
Contacts(CID,name,phone)
-----------------
-----------------
我使用Visual Studio 2005 c#
I"m using Visual Studio 2005 c#
提前致谢
Thanks in advance
推荐答案
以下是使用Northwind数据库的示例
Here is a sample that uses the Northwind database
using System; using System.Collections.Generic; using System.Compone ntModel; 使用 System.Data; 使用 System.Data.SqlClient; 使用 System.Drawing; using System.Text; using System.Windows.Forms; < font color = blue> namespace CSFilterDGVCombo { public partial class Form1:Form { public Form1() { InitializeComponent(); DataSet ds; private void Form1_Load( object sender,EventArgs e) { String strConn =" Server =。 \\sqlexpress; Database = NorthWind; Integrated Security = SSPI;" ;; SqlDataAdapter daProducts; SqlDataAdapter da; SqlConnection conn; conn = new SqlConnection(strConn); daProducts = new SqlDataAdapter (" Select * From Products",conn); da = new SqlDataAdapter(" Select * from Categories",conn); ds = new DataSet(); daProducts.Fill(ds," Products"); da.Fill(ds," Category"); DataTable dt = new DataTable(); dt.Columns.Add(" Category", typeof ( int ) ); dt.Columns.Add(" Products"); dataGridView1.AutoGenerateColumns = false ; < br> dataGridView1.DataSource = dt; DataGridViewComboBoxColumn colCategory = new DataGridViewComboBoxColumn(); colCategory.Width = 100; colCategory.DataPropertyName =" Category" ;; colCategory.DataSource = ds.Tables [" Category"]; colCategory.DisplayMember =" CategoryName" ;; colCategory.ValueMember =" CategoryID" ;; colCategory.HeaderText ="类别"; dataGridView1.Columns.Add(colCategory); DataGridViewComboBoxColumn dgvFilter = new DataGridViewComboBoxColumn(); dgvFilter.Width = 150; dgvFilter。 DataSource = ds.Tables [" Products"]。DefaultView; dgvFilter.Display Member =" ProductName" ;; dgvFilter.HeaderText =" Product" ;; dgvFilter.DataPropertyName =" Product" ;; dataGridView1.Columns.Add(dgvFilter); } private void dataGridView1_DataError( object sender,DataGridViewDataErrorEventArgs e) { e.Cancel = true ; } private void dataGridView1_CellBeginEdit( object sender,DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == 1) { DataGridViewComboBoxCell dgvCbo = dataGridView1 [e。 ColumnIndex,e.RowIndex] as DataGridViewComboBoxCell; if (dgvCbo!= null ) { String str = dataGridView1 [ 0,dataGridView1.CurrentRow.Index] .Value.ToString(); DataView dv = new DataView(ds.Tables [" Products"]); dv。 RowFilter =" CategoryID =" + str; dgvCbo.DataSource = dv; } private void dataGridView1_CellEndEdit ( object sender,DataGridViewCellEventArgs e) { if (e.ColumnIndex == 2) { DataGridViewComboBoxCell dgvCbo = dataGridView1 [e.ColumnIndex,e.RowIndex] as DataGridViewComboBoxCell; if (dgvCbo!= null ) { DataView dv = new DataView(ds.Tables [" Products"]); dgvCbo.DataSource = dv; < br>} |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Windows.Forms; namespace CSFilterDGVCombo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DataSet ds; private void Form1_Load(object sender, EventArgs e) { String strConn = "Server = .\\sqlexpress;Database = NorthWind;Integrated Security = SSPI;"; SqlDataAdapter daProducts; SqlDataAdapter da; SqlConnection conn; conn = new SqlConnection(strConn); daProducts = new SqlDataAdapter("Select * From Products", conn); da = new SqlDataAdapter("Select * from Categories", conn); ds = new DataSet(); daProducts.Fill(ds, "Products"); da.Fill(ds, "Category"); DataTable dt = new DataTable(); dt.Columns.Add("Category", typeof(int)); dt.Columns.Add("Products"); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = dt; DataGridViewComboBoxColumn colCategory = new DataGridViewComboBoxColumn(); colCategory.Width = 100; colCategory.DataPropertyName = "Category"; colCategory.DataSource = ds.Tables["Category"]; colCategory.DisplayMember = "CategoryName"; colCategory.ValueMember = "CategoryID"; colCategory.HeaderText = "Category"; dataGridView1.Columns.Add(colCategory); DataGridViewComboBoxColumn dgvFilter = new DataGridViewComboBoxColumn(); dgvFilter.Width = 150; dgvFilter.DataSource = ds.Tables["Products"].DefaultView; dgvFilter.DisplayMember = "ProductName"; dgvFilter.HeaderText = "Product"; dgvFilter.DataPropertyName = "Product"; dataGridView1.Columns.Add(dgvFilter); } private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { e.Cancel = true; } private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == 1) { DataGridViewComboBoxCell dgvCbo = dataGridView1[e.ColumnIndex, e.RowIndex] as DataGridViewComboBoxCell; if (dgvCbo != null) { String str = dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString(); DataView dv = new DataView(ds.Tables["Products"]); dv.RowFilter = "CategoryID = " + str; dgvCbo.DataSource = dv; } } } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 2) { DataGridViewComboBoxCell dgvCbo = dataGridView1[e.ColumnIndex, e.RowIndex] as DataGridViewComboBoxCell; if (dgvCbo != null) { DataView dv = new DataView(ds.Tables["Products"]); dgvCbo.DataSource = dv; } } } } } |
这篇关于DataGridView中的ComboBox,相应地为每一行设置组合框的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!