DataGridView中不同行的ComboBox值不同

5
    private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        int MaxRows = dgv.Rows.Count;

        for (int i = 0; i < MaxRows-1; i++)
        {                
            SqlDataAdapter da = new SqlDataAdapter("SELECT CAST(originalPrice * " + (1.00 + (float.Parse(txtMarkUp.Text) / 100.00)).ToString() + " * " + (1.00 + (float.Parse(dgv.Rows[i].Cells[4].Value.ToString()) / 100.00)).ToString() + " AS decimal (8,2)) AS sellingPrice FROM Warehouse WHERE barcode = '" + Convert.ToString(dgv.Rows[i].Cells[2].Value) + "'", conn);
            DataTable dt = new DataTable();
            da.Fill(dt);

            DataGridViewComboBoxColumn sellingPrice = dgv.Columns["sellingPrice"] as DataGridViewComboBoxColumn;

            sellingPrice.DataSource = dt;
            sellingPrice.ValueMember = "sellingPrice";
            sellingPrice.DisplayMember = "sellingPrice";

            dgv.Rows[i].Cells[5].Value = dt.Rows[0].ItemArray.GetValue(0);
            dgv.Rows[i].Cells[4].Value = dt.Rows[0].ItemArray.GetValue(2).ToString(); //percent of tax for that category of product
        }
    }

这段代码运行完美,但只适用于组合框中的一个值... 我需要在不同的行中有不同的值来填充组合框。如何做到这一点? 例如,当第二列的产品更改时,我需要更改第五列的销售价格组合框的值。 非常感谢任何帮助,我几乎没有任何解决方案。谢谢。
2个回答

7

我不确定您的意思,假设您想为组合框列逐行绑定不同的值。在这种情况下,如果您可以逐行确定条件,请使用以下方法:

(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).DataSource = dt;
(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).ValueMember = "sellingPrice";
(dgv.Rows[i].Cells[5] as DataGridViewComboBoxCell).DisplayMember = "sellingPrice";

这将为特定单元格设置数据源,而不是当前正在进行的列。希望这可以帮到你。

是的,那就是我想要的,也是我的错误。非常感谢您给了我方向。 附言:这仍然给我一个错误,可能是因为datamember和valuemember没有设置。我如何将它们设置为该单元格? - dex
它说 DataGridViewComboBoxCell 的值无效。 - dex
编辑以设置成员。 - V4Vendetta
谢谢,它正在工作,现在我将纠正其余的代码。再次感谢。 - dex

0

我认为你应该处理你的DataGridView的CellParsing事件,当产品单元格被更改并且用户导航到另一个单元格时,用你想要的结果填充下拉框。


CellEndEdit几乎相同,所以我认为不会有太大的区别,无论如何感谢回复。 - dex
你可以使用 cellparsing 事件中的 e.value 来确定选择了哪个产品,然后根据它进行数据库请求,然后将该行的组合框绑定到新获取的结果。我现在无法测试它,但我认为它应该可以工作。 - Kamyar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接