如何在DataGridView的下一行组合框列中添加不同的数据



我有一个场景,其中我有MS SQL服务器数据库表名称项目和另一个表名称项目大小和另一个表名称大小数量。意思是说我有一个产品,它有一个项目,每个项目有一个尺寸,每个尺寸有自己的数量,

在制作发票时,我想要一个网格视图来显示商品列表用户可以选择商品并插入到下一个网格视图中这里有一个组合框,它将加载商品的大小正如你所知道的,每个商品都有自己不同的大小所以我想在每行中以不同的方式显示它们这样用户就不会混合使用两种产品尺寸

您可以为每一行使用不同的数据源。我建议你使用数据表-它们中的每一个都将是特定的行(因此组合它们可以是一组数据集)。一个例子(不使用DataSet),但每一行都有自己的dataSource:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        //column 1 (normal textColumn):
        dataGridView1.Columns.Add("col1", "Column1");
        //column 2 (comboBox):
        DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
        comboCol.Name = "cmbColumn";
        comboCol.HeaderText = "combobox column";
        dataGridView1.Columns.Add(comboCol);
        for (int i = 0; i < 10; i++)
        {
            string text = "item " + i;
            int[] data = { 1 * i, 2 * i, 3 * i };
            CreateCustomComboBoxDataSouce(i, text, data);
        }
    }
    private void CreateCustomComboBoxDataSouce(int row, string texst, int[] data) 
    //row   index        ,and two parameters
    {
        dataGridView1.Rows.Add(texst);
        DataGridViewComboBoxCell comboCell = dataGridView1[1, row] 
        as  DataGridViewComboBoxCell;
        comboCell.DataSource = new BindingSource(data, null);
    }
}

另一个解决方案,我通过使用数据集(多个数据表),因为数据集是类变量,持有所有的数据表内部-如果你可能需要一些值从一个特定的数据表,你可以很容易地得到它。

  DataSet ds; //class variable
    public Form1()
    {
        InitializeComponent();
        ds = new DataSet();
        //column 1 (normal textColumn):
        dataGridView1.Columns.Add("col1", "Column1");
        //column 2 (comboBox):
        DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
        comboCol.Name = "cmbColumn";
        comboCol.HeaderText = "combobox column";
        dataGridView1.Columns.Add(comboCol);
        //using dataTable for each datasource:             
        for (int i = 0; i < 10; i++)
        {
            string text = "item " + i; //data for text
            int[] data = { 1 * i, 2 * i, 3 * i }; //data for comboBox:
            //create new dataTable:
            DataTable table = new DataTable("table" + i);
            table.Columns.Add("column1", typeof(string));
            //fillig rows:
            foreach (int item in data)
                table.Rows.Add(item);
            //add table to dataSet:
            ds.Tables.Add(table);
            //creating new row in dgv (text and comboBox):
            CreateCustomComboBoxDataSouce(i, text, table);
        }
    }
    private void CreateCustomComboBoxDataSouce(int row, string texst, DataTable table)
     //row index ,and two parameters
    {
        dataGridView1.Rows.Add(texst);
        DataGridViewComboBoxCell comboCell = dataGridView1[1, row] as
        DataGridViewComboBoxCell;
        comboCell.DataSource = new BindingSource(table, null);
        comboCell.DisplayMember = "column1"; //name of column indataTable to display!!
        comboCell.ValueMember = "column1"; // vlaue if needed 
        //(mostly you used these two propertes like: Name as DisplayMember, and Id 
        as ValueMember)
    }

最新更新