powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Построчный ввод данных в Datagridview
2 сообщений из 2, страница 1 из 1
Построчный ввод данных в Datagridview
    #38575359
Clava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда грид находится в режиме редактирования необходимо, чтобы данные вводились построчно, т.е при нажатии Enter фокус переходил на соседнюю колонку, а не строку. Для этого обработано событие KeyUp.
Проблемы: 1. При переходе фокус все равно сначала переходит на следующую строку, а потом возвращается на соседнюю ячейку.
2. если редактируется последняя запись, то после перехода по enter новая строка не создается.
Возможно есть способ лучше, посоветуйте.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
private void dgvDebits_KeyUp(object sender, KeyEventArgs e)
        {
            int cell = 0;
            if (e.KeyCode == Keys.Enter)
            {
                int currentRow = dgvDebits.CurrentRow.Index;
                if (currentRow >= 0)
                {
                    //Получаем индекс столбца для данной ячейки
                    int currentcell = dgvDebits.CurrentCell.ColumnIndex;
                    //Получаем общее количество столбцов
                    int countcell = dgvDebits.ColumnCount;
                    cell = currentcell + 1;
                    //Если текущий столбец равен 
                    //их общему количеству то делаем переход на новую строку
                    if (cell == countcell)
                    {
                        //Задаем первую ячейку, которая будет активной 
                        //при переходе на новую строку
                        if (dgvDebits.RowCount > currentRow + 1)
                        {
                            dgvDebits.CurrentCell = dgvDebits.Rows[currentRow].Cells[0];
                        }
                        else
                        {
                          //тут надо как-то обработать
                         //   dgvDebits.CurrentCell = dgvDebits.Rows[currentRow + 1 ].Cells[0];
                        }
                    }
                    else
                    {
                        if (dgvDebits.RowCount > currentRow+1)
                        {
                            //Задаем следующую ячейку в строке, 
                            //которая будет активна при нажатии на клавишу Enter 
                            dgvDebits.CurrentCell = dgvDebits.Rows[currentRow - 1].Cells[cell];
                        }
                        else
                        {
                            
                           dgvDebits.CurrentCell = dgvDebits.Rows[currentRow].Cells[cell];
                        }
                    }
                }
           }
            base.OnKeyUp(e);

        }
...
Рейтинг: 0 / 0
Построчный ввод данных в Datagridview
    #38575965
Clava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос решается переопределением DataGridView. НО перестает работать дизайнер, может быть кто-то сталкивался с такой проблемой? Делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
[Designer("System.Windows.Forms.Design.ControlDesigner, System.Design")]
    public class CustomDataGridView : DataGridView
    {
        [System.Security.Permissions.UIPermission(System.Security.Permissions.SecurityAction.LinkDemand,
            Window = System.Security.Permissions.UIPermissionWindow.AllWindows)]

        protected override bool ProcessDialogKey(Keys keyData)
        {
            // Extract the key code from the key value. 
            Keys key = (keyData & Keys.KeyCode);

            // Handle the ENTER key as if it were a RIGHT ARROW key. 
            if (key == Keys.Enter)
            {
                return this.ProcessRightKey(keyData);
            }
            return base.ProcessDialogKey(keyData);
        }

        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags =
            System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
        {
            // Handle the ENTER key as if it were a RIGHT ARROW key. 
            if (e.KeyCode == Keys.Enter)
            {
                return this.ProcessRightKey(e.KeyData);
            }
            return base.ProcessDataGridViewKey(e);
        }
    }


В InitializeComponent
Код: c#
1.
2.
this.AUPgrid = new CustomDataGridView();
protected CustomDataGridView AUPgrid;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Построчный ввод данных в Datagridview
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]