Member 13624040 Ответов: 1

Как динамически отображать значение из базы данных в столбце C# datagridview на основе combobox?


У меня есть ComboBoxColumn в моем datagridview. Он заполняется из базы данных списком элементов. Мне нужен еще один столбец с ценой из моей таблицы товаров в базе данных. Когда пользователь выбирает товар из выпадающего списка товаров, мне нужно, чтобы цена отображалась в столбце рядом с ним.

Что я уже пробовал:

Вот как я заполнил столбец items

DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
            cmb.DisplayIndex = 0;
            cmb.HeaderText = "Item";
            cmb.Name = "cmb";

            SQLiteConnection conn = ConnectonManager.GetConnection();
            string query = "SELECT item_id, item_name  FROM items;";
            SQLiteDataAdapter da = new SQLiteDataAdapter(query, conn);
            conn.Open();
            DataSet ds = new DataSet();
            da.Fill(ds, "items");
            cmb.DisplayMember = "item_name";
            cmb.ValueMember = "item_id";
            cmb.DataSource = ds.Tables["items"];


            dataGridView1.Columns.Add(cmb);


Как динамически заполнить столбец цены товара?

1 Ответов

Рейтинг:
2

Karthik_Mahalingam

попробовать это

using System;
using System.Data;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            LoadData();
            dataGridView1.EditingControlShowing +=dataGridView1_EditingControlShowing;
        }

        private void LoadData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("Name");

            dataGridView1.DataSource = dt;

            //ADD COMBOBOX COLUMN
            DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
            combo.HeaderText = "Item Name";
            combo.Name = "combo";
            var dat = new String[] { "Item 1", "Item 2", "Item 3", "Item 4" };
            combo.Items.AddRange(dat);

            //ADD THE COLUMN  TO DATAGRIDVIEW
            dataGridView1.Columns.Add(combo);
            dt.Columns.Add("Price");
        }
        ComboBox combo;
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            //GET OUR COMBO OBJECT
            combo = e.Control as ComboBox;
            if (combo != null)
            {
                // AVOID ATTACHMENT TO MULTIPLE EVENT HANDLERS
                combo.SelectedIndexChanged -= new EventHandler(combo_SelectedIndexChanged);

                //THEN NOW ADD
                combo.SelectedIndexChanged += combo_SelectedIndexChanged;
            }
        }

        private void combo_SelectedIndexChanged(object sender, EventArgs e)
        {
            string value = (sender as ComboBox).SelectedItem.ToString();
            double price  =50;
            var target = sender as  DataGridViewComboBoxEditingControl;
                int rowIndex = target.EditingControlRowIndex;
                if (value == "Item 1")
                { price = 100; }
                if (value == "Item 2")
                { price = 200; }

                  dataGridView1.Rows[rowIndex].Cells["Price"].Value = price; 
        }
    }
}


изменено с C# DataGridView ComboBoxColumn Selection Event - Camposha[^]