Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中Datagridview中的组合框_C#_Sql Server_Datagridview_Combobox - Fatal编程技术网

C# c中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.

我在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);
现在我想当用户在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 }}