DataGridView中的ComboBox,相应地为每一行设置组合框的值 [英] ComboBox in DataGridView, setting the combo box's values accordingly to each row

查看:64
本文介绍了DataGridView中的ComboBox,相应地为每一行设置组合框的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿所有,我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆