C# 在DataGridView中动态填充组合框列
我有一个DataGridView(DGV),它是使用存储过程填充的datatable填充的。(所有数据库调用都正确返回所需数据)。然后,我向DGV添加一个combobox列,该列应根据该行的股票代码提供批处理代码的选择。(另一个存储过程调用传入StockCode)但是,每行上的所有组合框都填充了所有行的组合批处理代码。在本例中,我尝试创建一个datatables数组来动态分配给DGV.Row,但结果相同。我有点理解为什么它不起作用,但我不知道如何纠正它。(我假设,由于我没有明确定义当前组合框的单元索引,并将其数据源分配给数组中的datatable,它只是在覆盖它,因此,任何帮助都将不胜感激C# 在DataGridView中动态填充组合框列,c#,datagridview,combobox,C#,Datagridview,Combobox,我有一个DataGridView(DGV),它是使用存储过程填充的datatable填充的。(所有数据库调用都正确返回所需数据)。然后,我向DGV添加一个combobox列,该列应根据该行的股票代码提供批处理代码的选择。(另一个存储过程调用传入StockCode)但是,每行上的所有组合框都填充了所有行的组合批处理代码。在本例中,我尝试创建一个datatables数组来动态分配给DGV.Row,但结果相同。我有点理解为什么它不起作用,但我不知道如何纠正它。(我假设,由于我没有明确定义当前组合框的单
// 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
loopcmb
中是一个DataGridViewComboBoxColumn
…注意“列”部分。foreach
循环只会更改同一组合列的数据源
。因此,组合框列项目将是从网格中最后一行返回的项目。这将显示在网格组合框中。如果每一行都有一组不同的值依赖于另一个单元格s值…然后您必须手动处理每行“每个”组合框单元格的项。如果组合框都不同,那么我建议您创建一个方法,给定“StockCode”将返回可用于单个组合框的“BatchCode”集合。只是一个想法。