C# c中Datagridview中的组合框
我在DataGridview中创建了一个动态组合框,如下所示:C# c中Datagridview中的组合框,c#,sql-server,datagridview,combobox,C#,Sql Server,Datagridview,Combobox,我在DataGridview中创建了一个动态组合框,如下所示: string strcmd2 = "Select Food_Name,Food_ID from dbo.TblFood_Food "; Dt2 = Dbc.seletcmd(strcmd2); DataGridViewComboBoxColumn ColumnAcc = new DataGridViewComboBoxColumn(); ColumnAcc.DataPropertyName = "combo"; ColumnAcc.
string strcmd2 = "Select Food_Name,Food_ID from dbo.TblFood_Food ";
Dt2 = Dbc.seletcmd(strcmd2);
DataGridViewComboBoxColumn ColumnAcc = new DataGridViewComboBoxColumn();
ColumnAcc.DataPropertyName = "combo";
ColumnAcc.HeaderText = "Food";
ColumnAcc.DataSource = Dt2;
ColumnAcc.DisplayMember = "Food_Name";
ColumnAcc.ValueMember = "Food_ID";
DataGridview_Food.Columns.Insert(0,ColumnAcc);
现在我想当用户在combobox中选择一个项目时,它的值出现在datagridview的另一个单元格中。我能做什么?
谢谢你试试这个
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace App1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//string strcmd2 = "Select Food_Name,Food_ID from dbo.TblFood_Food ";
//Dt2 = Dbc.seletcmd(strcmd2);
//fabricate some data....
List<Food> Foods = new List<Food>();
Foods.Add(new Food() { Food_ID = "0", Food_Name = "NONE" });
Foods.Add(new Food() { Food_ID = "1", Food_Name = "Burger" });
Foods.Add(new Food() { Food_ID = "2", Food_Name = "Fries" });
DataGridViewComboBoxColumn ColumnAcc = new DataGridViewComboBoxColumn();
ColumnAcc.DataPropertyName = "combo";
ColumnAcc.HeaderText = "Food";
ColumnAcc.Name = "Food";
ColumnAcc.DataSource = Foods;
ColumnAcc.DisplayMember = "Food_Name";
ColumnAcc.ValueMember = "Food_ID";
DataGridview_Food.Columns.Insert(0, ColumnAcc);
DataGridview_Food.EditingControlShowing += DataGridview_Food_EditingControlShowing;
}
private void DataGridview_Food_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (((DataGridView)sender).CurrentCell.ColumnIndex == 0)
{
ComboBox cmb = e.Control as ComboBox;
if (cmb != null)
{
// remove the current event handler
cmb.SelectionChangeCommitted -= new EventHandler(cmb_SelectionChanged);
// now re-attach the event handler
cmb.SelectionChangeCommitted += new EventHandler(cmb_SelectionChanged);
}
}
}
private void cmb_SelectionChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
Food selectedFood = (Food)cmb.SelectedItem;
MessageBox.Show(string.Format("You selected item {0} ---> {1}", selectedFood.Food_ID, selectedFood.Food_Name));
}
}
}
class Food
{
public string Food_Name { get; set; }
public string Food_ID { get; set; }
}
一个选项是处理DataGridView.CellEndEdit事件。从组合框中选择一个选项并离开单元格后,让它更新所需的单元格。假设ComboBox列的索引为0,需要更新的列为第1列:
this.dataGridView1.CellEndEdit += DataGridView1_CellEndEdit;
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
this.dataGridView1[1, e.RowIndex].Value = this.dataGridView1[e.ColumnIndex, e.RowIndex].Value;
}
}
现在,让我们假设您有以下组合框项:
设置ComboBoxColumn.ValueMember=Food_ID后:选择Apple将另一个单元格值设置为1;选择Steak将另一个单元格的值设置为2;也就是说,如果FooSoID不是你想要设置在另一个单元格中的值,那么考虑MaTyTy使用EdgEngestRead事件的方法。< /P>你可以确定用户在DATAGRIDVIEW感谢的CytCaltCopCurt事件中选择了什么,但是在CeleCistTrcCurt事件库中没有定义!!@!Milad,但您仍然可以访问DataGridViews\u Food.Columns[index]或类似的列that@MiladRoohi你可以从“e”开始施放。。。。我认为CellContentClick不会有任何效果。看看我的答案,虽然不完美,但它似乎是解决问题的方法。。。。。可能会给你一些想法。。。
{{ Food_Name = "Apple", Food_ID = 1 },
{ Food_Name = "Steak", Food_ID = 2 },
{ Food_Name = "Toast", Food_ID = 3 }}