C# 在DataGridView中动态填充组合框列

C# 在DataGridView中动态填充组合框列,c#,datagridview,combobox,C#,Datagridview,Combobox,我有一个DataGridView(DGV),它是使用存储过程填充的datatable填充的。(所有数据库调用都正确返回所需数据)。然后,我向DGV添加一个combobox列,该列应根据该行的股票代码提供批处理代码的选择。(另一个存储过程调用传入StockCode)但是,每行上的所有组合框都填充了所有行的组合批处理代码。在本例中,我尝试创建一个datatables数组来动态分配给DGV.Row,但结果相同。我有点理解为什么它不起作用,但我不知道如何纠正它。(我假设,由于我没有明确定义当前组合框的单

我有一个DataGridView(DGV),它是使用存储过程填充的datatable填充的。(所有数据库调用都正确返回所需数据)。然后,我向DGV添加一个combobox列,该列应根据该行的股票代码提供批处理代码的选择。(另一个存储过程调用传入StockCode)但是,每行上的所有组合框都填充了所有行的组合批处理代码。在本例中,我尝试创建一个datatables数组来动态分配给DGV.Row,但结果相同。我有点理解为什么它不起作用,但我不知道如何纠正它。(我假设,由于我没有明确定义当前组合框的单元索引,并将其数据源分配给数组中的datatable,它只是在覆盖它,因此,任何帮助都将不胜感激

            // fill the adapter with the executed cmd
            adapter.Fill(dt);

            //populate the gridview with the datatable                
            dgv_BOM.DataSource = dt;
            dgv_BOM.AutoSize = true;
            dgv_BOM.AutoResizeColumns();
            dgv_BOM.Columns["StockCode"].DisplayIndex = 0;
            dgv_BOM.Columns["Description"].DisplayIndex = 1;
            dgv_BOM.RowHeadersVisible = false;

            DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
            cmb.HeaderText = "Select Batch Code";
            cmb.Name = "cmb";
            cmb.Width = 150;
            dgv_BOM.Columns.Add(cmb);
            DataTable[] dtArray = new DataTable[dgv_BOM.Rows.Count];

            int count = 0;

            foreach (DataGridViewRow row in dgv_BOM.Rows)
            {               
                if (row.IsNewRow) continue;

                stckcd = row.Cells["StockCode"].Value.ToString();
                dtArray[count] = SP_RMBatchCodes(stckcd); //returns a datatable object
                cmb.DataSource = dtArray[cnt];
                cmb.DisplayMember = "BatchNo";

                count++;
            }

            this.dgv_BOM.Columns["Traceable"].Visible = false;

cmb.DataSource=dtArray[cnt];应该是cmb.DataSource=dtArray[count];在最后一个
foreach
loop
cmb
中是一个
DataGridViewComboBoxColumn
…注意“列”部分。
foreach
循环只会更改同一组合列的
数据源
。因此,组合框列项目将是从网格中最后一行返回的项目。这将显示在网格组合框中。如果每一行都有一组不同的值依赖于另一个单元格s值…然后您必须手动处理每行“每个”组合框单元格的项。如果组合框都不同,那么我建议您创建一个方法,给定“StockCode”将返回可用于单个组合框的“BatchCode”集合。只是一个想法。