首页 文章

c#中的Datagridview中的组合框

提问于
浏览
0

我在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的另一个单元格中 . 我能做什么?谢谢

2 回答

  • 0

    试试这个....

    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; }
    }
    
  • 0

    一种选择是处理 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 不是你要在另一个单元格中设置的值,那么考虑使用 EditControlShowing 事件的Monty方法 .

相关问题