在DataGridViewComboBoxColumn中的数据使用同一个数据源,如果要连续输入数据,如何在每选择一个数据加入到DataGridViewComboBoxColumn后,数据源中的数据自动将已经用过的数值去掉,实现不会选择重复数据的效果?

解决方案 »

  1.   

    不在数据库里面删除,只是在datasource中删除,可以实现吗?
      

  2.   

    QQQQAnnie 谢谢你了 总之我想实现通过DataGridViewComboBoxColumn选取的值不重复就行了,因为datagridview有多行
      

  3.   

    你的combobox里的值是怎么来的?
      

  4.   

     private void ComboBox_Load(object sender, EventArgs e)
            {
                comboBox2.Items.Add("1");
                comboBox2.Items.Add("2");
                comboBox2.Items.Add("3");
                comboBox2.Items.Add("4");
            } private void button1_Click(object sender, EventArgs e)
            {
                if (comboBox2.Text != "")
                {
                    string str = comboBox2.Text;
                    listBox1.Items.Add(str);
                    comboBox2.Items.Remove(str);
                }
                else
                {
                    MessageBox.Show("Data is empty!");
                }
            }
     不知道楼主是这个意思不?
      

  5.   

                    DataGridViewComboBoxColumn stuff_comb = new DataGridViewComboBoxColumn();
                    DataSet ds_stuffname = SqlHelper.ExecuteDataset(conn.str, CommandType.Text, "select Stuff_Name from TS24_stuff where Food_Name = '" + foodname + "'");
                    stuff_comb.DataSource = ds_stuffname.Tables[0];
    这是我combox里的值的由来
      

  6.   

    那你添加的时候选那个值不都是已经添加过的吗,还是把这个值添加到另外一个表里,只是从这个表里取出数据?我觉得我给你写的那个你可以参考一下,不对库进行操作,只对comboBox进行操作
      

  7.   

    先谢谢QQQQAnnie 兄弟了啊 我在试试
      

  8.   

    DataGridViewComboBoxColumn 列的数据源变化时,如果列的值不在数据源中时会出现DataError错误。可以使用DataGridViewTextBoxColumn代替DataGridViewComboBoxColumn,当前单元格是要处理的列时,弹出下一个ComboBox进行处理。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            DataTable dtType = new DataTable();
            List<string> lstAllType = new List<string>(); // 所有可以下拉的数据源。
            ComboBox cmbType = new ComboBox();
            public Form1()
            {
                InitializeComponent();            lstAllType.Add("TXT");
                lstAllType.Add("EXE");
                lstAllType.Add("OBJ");
                lstAllType.Add("CS");
                lstAllType.Add("CPP");
                lstAllType.Add("PDF");
                // ...            dtType.Columns.Add("ID", typeof(int));
                dtType.Columns.Add("Type", typeof(string));
                dataGridView1.DataSource = dtType;            dataGridView1.Controls.Add(cmbType);
                cmbType.Visible = false;
                cmbType.Validating += new CancelEventHandler(cmbType_Validating);
            }        /// <summary>
            /// 验证下拉列表时,更新单元格的值。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void cmbType_Validating(object sender, CancelEventArgs e)
            {
                try
                {
                    DataGridViewCell dgvc = (DataGridViewCell)cmbType.Tag;
                    string strNewType = cmbType.Text; // 新类型。
                    if (dgvc.Value.ToString() != strNewType)
                    {
                        dgvc.Value = strNewType;
                    }
                }
                catch { }
            }        /// <summary>
            /// 点击单元格时根据所在列进行处理。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                cmbType.Visible = false;            if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && dataGridView1.Columns[e.ColumnIndex].Name == "Type")
                {
                    // 获得未使用的类型。
                    cmbType.Items.Clear();
                    foreach (string strType in lstAllType)
                    {
                        if (dtType.Select("[Type] = '" + strType + "'", "", DataViewRowState.CurrentRows).Length == 0)
                        {
                            cmbType.Items.Add(strType);
                        }
                    }                // 显示ComboBOX。
                    Rectangle rt = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
                    cmbType.Text = dataGridView1[e.ColumnIndex,e.RowIndex].Value.ToString();
                    cmbType.Tag = dataGridView1[e.ColumnIndex, e.RowIndex];
                    cmbType.Left = rt.Left;
                    cmbType.Top = rt.Top;
                    cmbType.Width = rt.Width;
                    cmbType.Height = rt.Height;
                    cmbType.Visible = true;
                    cmbType.Focus();
                }
            }
        }
    }
      

  9.   


                        if (dtType.Select("[Type] = '" + strType + "'", "", DataViewRowState.CurrentRows).Length == 0)