Пример TextBox в Datagridview - PullRequest
       11

Пример TextBox в Datagridview

2 голосов
/ 23 ноября 2010

У меня есть простой пример текстового поля, как показано ниже:

private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.Text = "Apple";
    }
private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length == 1) 
        {
            if (textBox1.Text == "B" || textBox1.Text == "b") 
            {
                textBox1.Text = "Ball";
            }
        }
    }

По умолчанию textbox1 должен возвращать «Apple» при загрузке формы, но когда я нажимаю «b» или «B», он должен возвращать «Ball» в textbox1. У меня путаница при использовании его в datagridview. как я могу сделать это в datagridview?.

Предположим, у меня есть один столбец в сетке данных, как показано ниже:

private void Form1_Load(object sender, EventArgs e)
    {
        DataGridViewColumn Particulars = new DataGridViewTextBoxColumn();
        dataGridView1.Columns.Insert(0, Particulars );
    }

Если у меня есть столбец выше В datagridview1, чем Как мне сделать с datagridview1, что я сделал с текстовым полем?.

1 Ответ

5 голосов
/ 23 ноября 2010

Возможно, вам будет проще использовать функцию автозаполнения, встроенную в элемент управления textbox, а не пытаться самостоятельно кодировать все возможные сценарии.

Существует два важных свойства элемента управления TextBox, которые необходимо настроить для включения его функции автозаполнения: AutoCompleteMode и AutoCompleteSource.

Свойство AutoCompleteMode позволяет выбрать как функция автозаполнения текстового поля будет выглядеть в действии. Вы можете выбрать любое из значений AutoCompleteMode

<b>None</b>            Disables the automatic completion feature for the ComboBox and TextBox controls.
<b>Suggest</b>         Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings.
<b>Append</b>          Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters.
<b>SuggestAppend</b>   Applies both Suggest and Append options.

Свойство AutoCompleteSource позволяет указать строки, с которыми текстовое поле должно предлагать автозаполнение. В вашем случае вы, вероятно, захотите указать CustomSource, который требует, чтобы вы установили свойство AutoCompleteCustomSource в пользовательский набор строк - что-то вроде «Apple» , Мяч, ... "и т. Д.

DataGridViewTextBoxColumn просто содержит стандартный TextBox элемент управления, поэтому все предоставляемые им функции автозаполнения уже доступны вам бесплатно. Вы можете установить соответствующие свойства этого текстового поля, обрабатывая событие EditingControlShowing вашего DataGridView, например так:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    //Create and fill a list to use as the custom data source
    var source = new AutoCompleteStringCollection();
    source.AddRange(new string[] {"Apple", "Ball"});

    //Set the appropriate properties on the textbox control
    TextBox dgvEditBox = e.Control as TextBox;
    if (dgvEditBox != null)
    {
        dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
        dgvEditBox.AutoCompleteCustomSource = source;
        dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    }
}

РЕДАКТИРОВАТЬ: Если вы предпочитаете сохранить то же поведение, что и в исходном примере текстового поля, вы можете просто обработать событие TextChanged для DataGridViewTextBoxColumn , Как я уже объяснял выше, DataGridViewTextBoxColumn просто содержит стандартный элемент управления TextBox, поэтому довольно просто добавить обработчик для его события TextChanged и использовать тот же код, который вы использовали ранее:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    TextBox dgvEditBox = e.Control as TextBox;
    if (dgvEditBox != null)
    {
        //Add a handler for the TextChanged event of the underlying TextBox control
        dgvEditBox.TextChanged += new EventHandler(dgvEditBox_TextChanged);
    }
}

private void dgvEditBox_TextChanged(object sender, EventArgs e)
{
    //Extract the textbox control
    TextBox dgvEditBox = (TextBox)sender;

    //Insert the appropriate string
    if (dgvEditBox.Text.Length == 1)
    {
        if (dgvEditBox.Text == "B" || dgvEditBox.Text == "b")
        {
            dgvEditBox.Text = "Ball";
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...