c# - 在 C# 中制作一个完美的自动完成文本框
问题描述
我创建了一个搜索文本框,并在“按名称”文本位于组合框中时启用了自动完成功能。自动完成源是我的 .mdf 数据库文件。自动完成工作正常,但有一个问题。
当我点击自动完成建议时,建议中的文本会被选中并输入到文本框中,但同时也会输入几个“空格” 。
所以,下一次,当我点击文本框时,Ibeam 不会从文本的最后一个字母开始,我必须退格几次。
我认为我错过了一些自动完成属性。
这是我可以与自动完成相关的代码:
private void vieworder_Load(object sender, EventArgs e)
{
//I am including the load method because I think that problem may be caused because I didn't call the autocomp method here
try
{
con.Open();
if (con.State == ConnectionState.Open)
{
lblstatus.Text = "Connected";
lblstatus.ForeColor = Color.Green;
}
else
{
lblstatus.Text = "Not-Connected";
lblstatus.ForeColor = Color.Red;
}
showdtgrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void showautocomp()
{
//this is the method that starts the autocomplete
cmd = new SqlCommand("SELECT cust_name FROM ordertbl ", con);
SqlDataReader dr = cmd.ExecuteReader();
AutoCompleteStringCollection autoComplete = new AutoCompleteStringCollection();
while (dr.Read())
{
autoComplete.Add(dr.GetString(0));
}
txtsrchbyname.AutoCompleteMode = AutoCompleteMode.Suggest;
txtsrchbyname.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtsrchbyname.AutoCompleteCustomSource = autoComplete;
dr.Close();
}
private void btnrefresh_Click(object sender, EventArgs e)
{
//the refresh button refreshes the datagrid and auto complete
showdtgrid();
showautocomp();
}
private void search()
{
//this method selects from DB when button is clicked
if (cmbsearchby.Text == "By name")
{
SqlCommand cmd1 = new SqlCommand("SELECT*FROM ordertbl WHERE cust_name LIKE '" + txtsrchbyname.Text + "%'", con);
da = new SqlDataAdapter(cmd1);
dtbl = new DataTable();
da.Fill(dtbl);
dtgridViewOrder.DataSource = dtbl;
}
else if (cmbsearchby.Text == "Containing")
{
SqlCommand cmd2 = new SqlCommand("SELECT*FROM ordertbl WHERE cust_name LIKE '%" + txtsrchbyname.Text + "%'", con);
da = new SqlDataAdapter(cmd2);
DataTable dtbl2 = new DataTable();
da.Fill(dtbl2);
dtgridViewOrder.DataSource = dtbl2;
}
}
private void txtsrchbyname_Click(object sender, EventArgs e)
{
//I also included show autocomp method in the text box so I dont have to refresh everytime
if (cmbsearchby.Text == "By name")
{
showautocomp();
}
else
{
txtsrchbyname.AutoCompleteMode = AutoCompleteMode.None;
}
}
解决方案
似乎问题来自cust_name
. 一个快速的解决方法是修剪从数据库中获取的结果
autoComplete.Add(dr.GetString(0).Trim());
推荐阅读
- python - 只允许某些 python 脚本允许导入和运行另一个脚本
- html - 获取所有行的数据并提取输入值,td.data() 属性的 tr.data()
- sql - 如何将变量从 PL/pgSQL 函数传递到查询选择语句?
- python - Python 多处理逐渐增加内存,直到它运行我们的
- google-analytics - Gtag.js 在 pagespeed 洞察力中增加 LCP
- apache-spark - 如何使用 spark-xml 包使用 XSD 解析 XML?
- datadog - Datadog 导出日志超过 5,000 条
- r - ggplot 用于线性对数回归模型?
- java - 当 Spring 的方法之一使用 @transactional 注释时,Spring 不会为 @service 注释类创建 bean
- javascript - 如何将具有嵌套数组的对象转换为平面对象数组?