且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

DataGridView中的ComboBox,相应地为每一行设置组合框的值

更新时间:2023-12-04 09:56:58

以下是使用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;
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;&quot ;;
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&quot ;;
colCategory.DataSource = ds.Tables [" Category"];
colCategory.DisplayMember =" CategoryName&quot ;;
colCategory.ValueMember =" CategoryID&quot ;;
colCategory.HeaderText ="类别";
dataGridView1.Columns.Add(colCategory);
DataGridViewComboBoxColumn dgvFilter = new DataGridViewComboBoxColumn();
dgvFilter.Width = 150;
dgvFilter。 DataSource = ds.Tables [" Products"]。DefaultView;
dgvFilter.Display Member =" ProductName&quot ;;
dgvFilter.HeaderText =" Product&quot ;;
dgvFilter.DataPropertyName =" Product&quot ;;
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; }










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;
                    }
                    }
        }
    }
}