Изменить поведение редактируемого столбца DataGridView - PullRequest
3 голосов
/ 14 октября 2011

У меня есть DataGridView, в котором у меня есть столбец. Этот столбец не только для чтения, и его цель - иметь возможность писать текст в каждой ячейке. Когда я выбираю пустую ячейку и начинаю печатать, она работает как положено. Однако, когда в ячейке уже есть текст, и я начинаю печатать, весь существующий текст удаляется. Как я могу предотвратить это?

Пример:

Ячейка уже содержит "ABC". Когда я набираю D, я хочу, чтобы ячейка содержала «ABCD», но она содержит только «D».

1 Ответ

3 голосов
/ 15 октября 2011

Примите dg в качестве вашего datagridview. Попробуйте назначить вашему обработчику данных следующий обработчик событий EditingControlShowing, CellEnter, CellLeave. И тебе сейчас должно быть хорошо.

    string str = string.Empty;
    int i = 0;

    private void dg_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        str = dgv[e.ColumnIndex, e.RowIndex].Value.ToString();
    }

    void dg_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox tb = (TextBox)e.Control;
        tb.TextChanged += new EventHandler(tb_TextChanged);
    }

    void tb_TextChanged(object sender, EventArgs e)
    {
        if (i == 0)
        {
            i++;
            DataGridViewTextBoxEditingControl dgv = (DataGridViewTextBoxEditingControl)sender;
            string curVal = dgv.Text;
            dgv.Text = str + curVal;
            dgv.SelectionStart = dgv.Text.Length;
        }
        dg.EditingControlShowing -= new DataGridViewEditingControlShowingEventHandler(dg_EditingControlShowing);
        dg.CellEnter -= new DataGridViewCellEventHandler(dg_CellEnter);
    }

    private void dg_CellLeave(object sender, DataGridViewCellEventArgs e)
    {
        i = 0;
    }

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...