簡體   English   中英

C#中Datagridview中的組合框

[英]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將其他單元格值設置為2Food_ID 。如果Food_ID 不是您要在其他單元格中設置的值,然后考慮使用EditControlShowing事件的蒙蒂方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM