Разные значения ComboBox в DataGridView в разных строках

#c# #datagridview #combobox

#c# #datagridview #combobox

Вопрос:

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

Этот код работает отлично, но только для одного значения в combobox… Мне нужны разные значения в разных строках для выпадающего списка. Как я могу это сделать?
В примере, когда в столбце 2 изменяется продукт, мне нужно, чтобы он изменил значения столбца 5, который является выпадающим списком с ценами продажи.
Буду признателен за любую помощь, на мой взгляд, у меня почти нет решения для этого. Спасибо.

Ответ №1:

Я не уверен, чего вы хотите, предполагая, что вы хотите привязать разные значения по строкам для столбца combobox В этом случае, если вы можете определить условие по строкам, используйте это

 (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";
  

Это установит источник данных для этой конкретной ячейки вместо столбца, который вы делаете в данный момент.

Надеюсь, это поможет.

Комментарии:

1. Да, это то, что я хочу, и то, что я перепутал.. большое спасибо, что указали мне направление. p.s. Это все еще выдает мне ошибку, возможно, потому, что datamember и valuemember не установлены. Как я могу установить их в эту ячейку?

2. В нем говорится, что значение DataGridViewComboBoxCell недопустимо.

3. Отредактировано для настройки элементов.

4. Спасибо, это работает, теперь я собираюсь исправить остальную часть кода. Еще раз спасибо.

Ответ №2:

Я думаю, вам следует обработать CellParsing событие вашего datagridview, и когда ячейка продукта будет изменена и пользователь перейдет к другой ячейке, заполните поле со списком желаемыми результатами.

Комментарии:

1. CellEndEdit это почти то же самое, поэтому я думаю, что это не будет иметь большого значения, в любом случае, спасибо за ответ.

2. Вы можете использовать e.значение из cellparsing события, чтобы узнать, какой продукт был выбран, и выполнить запрос базы данных на его основе, а затем привязать выпадающий список этой строки к вновь полученному результату. Я не могу протестировать это сейчас, но я думаю, что это должно сработать.