DataGridViewComboBoxColumn中DataSource问题 在DataGridViewComboBoxColumn中的数据使用同一个数据源,如果要连续输入数据,如何在每选择一个数据加入到DataGridViewComboBoxColumn后,数据源中的数据自动将已经用过的数值去掉,实现不会选择重复数据的效果? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不在数据库里面删除,只是在datasource中删除,可以实现吗? QQQQAnnie 谢谢你了 总之我想实现通过DataGridViewComboBoxColumn选取的值不重复就行了,因为datagridview有多行 你的combobox里的值是怎么来的? 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!"); } } 不知道楼主是这个意思不? 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里的值的由来 那你添加的时候选那个值不都是已经添加过的吗,还是把这个值添加到另外一个表里,只是从这个表里取出数据?我觉得我给你写的那个你可以参考一下,不对库进行操作,只对comboBox进行操作 先谢谢QQQQAnnie 兄弟了啊 我在试试 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(); } } }} if (dtType.Select("[Type] = '" + strType + "'", "", DataViewRowState.CurrentRows).Length == 0) StarTeam 高手进! 关于文本框不能输入字母的问题 自动检查 无用的dll 在后台编码中,如果设置GroupBox控件的Text属性? 紧急求助:在.net 2003中,制作安装程序时,如果在安装包中运行一个安装程序 在C#里,一个30位的整数如何表示,有没有好的压缩方法? C#泛型问题 紧急求救!help me! 请问socket关闭后为什么端口不能释放,用netstat-a还可以看到? 如何获取使用ShowDialog方法显示的窗体? 求余数出错问题 CollectionBase的问题
{
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!");
}
}
不知道楼主是这个意思不?
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里的值的由来
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();
}
}
}
}
if (dtType.Select("[Type] = '" + strType + "'", "", DataViewRowState.CurrentRows).Length == 0)