Я сделал текстовое поле поиска и включил автозаполнение, когда текст «по имени» находится в поле со списком. Источник автозаполнения - это мой файл базы данных .mdf. Автозаполнение работает нормально, но есть одна проблема.
Когда я нажимаю на предложение автозаполнения, текст в предложении выбирается и печатается в текстовом поле, но вместе с текстом несколько 'Пробелы' также набираются.
Итак, в следующий раз, когда я нажимаю на текстовое поле, Ibeam не начинается с последней буквы текста, и я должен BackSpace это несколько раз.
Я думаю, что я пропустил некоторые свойства автозаполнения.
Это мой код, который может быть связан с автозаполнением:
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;
}
}