如何基于组合框在C#datagridview列上动态显示数据库中的值? [英] How do I dynamically display value from database on a C# datagridview column based on a combobox?
本文介绍了如何基于组合框在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屋!
查看全文