Создание идеального автозаполнения TextBox за c# - PullRequest
0 голосов
/ 23 апреля 2020

Я сделал текстовое поле поиска и включил автозаполнение, когда текст «по имени» находится в поле со списком. Источник автозаполнения - это мой файл базы данных .mdf. Автозаполнение работает нормально, но есть одна проблема.

Когда я нажимаю на предложение автозаполнения, текст в предложении выбирается и печатается в текстовом поле, но вместе с текстом несколько 'Пробелы' также набираются.

Image of how spaces get typed in the Text

Итак, в следующий раз, когда я нажимаю на текстовое поле, Ibeam не начинается с последней буквы текста, и я должен BackSpace это несколько раз.

Image of how the Ibeam blinks at the place where i clicked Instead of starting at the last letter of the TEXT

Я думаю, что я пропустил некоторые свойства автозаполнения.

Это мой код, который может быть связан с автозаполнением:

 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;
            }
        }

1 Ответ

1 голос
/ 23 апреля 2020

Похоже, проблема связана с типом базы данных cust_name. Быстрый обходной путь - обрезка результата, извлеченного из базы данных

autoComplete.Add(dr.GetString(0).Trim());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...