如何基于组合框在C#datagridview列上动态显示数据库中的值? [英] How do I dynamically display value from database on a C# datagridview column based on a combobox?

查看:84
本文介绍了如何基于组合框在C#datagridview列上动态显示数据库中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的datagridview中有一个ComboBoxColumn。这是从包含项目列表的数据库填充的。我需要另一列与数据库中的项目表的价格。当用户从Items Combobox中选择一个项目时,我需要在它旁边的列上显示价格。



我尝试了什么:



这就是我填写项目列的方式



I have a ComboBoxColumn in my datagridview. This is populated from database with a list of items. I need another column with price from my items table on the database. When a user selects an item from the Items Combobox, I need the price to be displayed on the column next to it.

What I have tried:

This is how I have populated the items column

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);





如何动态填充项目价格栏?



How do I dynamically fill the item price column?

推荐答案

试试这个



try this

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 [ ^ ]


这篇关于如何基于组合框在C#datagridview列上动态显示数据库中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆