使用autosuggest只创建一个dataGridColumn
本文关键字:一个 dataGridColumn autosuggest 创建 使用 | 更新日期: 2023-09-27 17:53:37
我正在为杂货店或商店制作一个c#项目。我有一个数据网格,我在其中编程的细胞自动建议,它工作得很好。
只有一个问题。我希望数据网格中的一列(例如BARCODE Columns)是一个仅具有自动建议的文本框,而不是所有列。private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var source = new AutoCompleteStringCollection();
string cnn = (@"Data Source=TaLy-PC;Initial Catalog=dbMarketi;Integrated Security=True;Pooling=False");
SqlConnection connection = new SqlConnection(cnn.ToString());
SqlCommand command = new SqlCommand("Select Barcode FROM tblDepo", connection);
try
{
connection.Open();
{
SqlDataReader drd = command.ExecuteReader();
while (drd.Read())
{
// this.comboBoxEx1.Items.Add(drd.GetString(0).ToString());
source.AddRange(new string[] { drd.GetString(0).ToString() });
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
connection.Close();
TextBox dgvEditBox = e.Control as TextBox;
if (dgvEditBox != null)
{
dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
dgvEditBox.AutoCompleteCustomSource = source;
dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
这是一个建议,尝试将您的AutoCompleteStringCollection
和您的条形码Products
查询分开。
private AutoCompleteStringCollection source = new AutoCompleteStringCollection();
private void loadAutoCompleteStringCollection();
{
string cnn = (@"Data Source=TaLy-PC;Initial Catalog=dbMarketi;Integrated Security=True;Pooling=False");
source.Clear();
SqlConnection connection = new SqlConnection(cnn.ToString());
SqlCommand command = new SqlCommand("Select Barcode FROM tblDepo", connection);
try
{
connection.Open();
{
SqlDataReader drd = command.ExecuteReader();
while (drd.Read())
{
// this.comboBoxEx1.Items.Add(drd.GetString(0).ToString());
source.AddRange(new string[] { drd.GetString(0).ToString() });
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
connection.Close();
}
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox dgvEditBox = e.Control as TextBox;
if (dataGridView1.CurrentCell.ColumnIndex == 1)
{
if (dgvEditBox != null)
{
dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
dgvEditBox.AutoCompleteCustomSource = source;
dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
}
//If you want to reload the AutoCompleteStringCollection
private void button1_Click(object sender, System.EventArgs e)
{
loadAutoCompleteStringCollection();
}
你的代码基本正确。
我要做的是纠正你的代码是你的editingcontrolshoweventhandler你基本上说,对待任何列作为一个文本框。
如果你想只把一个特定的列作为一个文本框,然后运行检查,像这样:-
// EditingCOntrol Showing
If(datagridview.CurrentCell.ColumnIndex == 1)
{
TextBox dgvEditBox = e.Control as TextBox;
if (dgvEditBox != null)
{
dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
dgvEditBox.AutoCompleteCustomSource = source;
dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
// public Object
public AutoCompleteStringCollection source = new AutoCompleteStringCollection();