[英]Combobox in Datagridview in c#
我在DataGridview中創建了一個動態組合框,如下所示:
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);
現在我想當用戶在組合框中選擇一個項目時,其值出現在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
選擇一個選項並離開單元格后,讓它更新所需的單元格。 假設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;
}
}
現在,讓我們假設您有以下ComboBox
項:
{{ Food_Name = "Apple", Food_ID = 1 },
{ Food_Name = "Steak", Food_ID = 2 },
{ Food_Name = "Toast", Food_ID = 3 }}
設置ComboBoxColumn.ValueMember = "Food_ID
:選擇Apple
會將其他單元格值設置為1
;選擇Steak
將其他單元格值設置為2
; Food_ID
。如果Food_ID
不是您要在其他單元格中設置的值,然后考慮使用EditControlShowing
事件的蒙蒂方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.