Steven8579 Ответов: 1

Очистить представление datagridview


Когда пользователь нажимает клавишу backspace, я хочу, чтобы текстовое поле и datagridview были очищены. С помощью этого кода, который у меня есть, я должен дважды нажать клавишу backspace, чтобы очистить datagridview.

Что я уже пробовал:

private void txtMusicianName_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Back)
            {

                e.Handled = false;
                gridSelectMusician.Rows.Clear();
                txtMusicianName.Clear();


            }
            
        }


У меня также есть вызов БД:
"SELECT * FROM `login` WHERE `Email` LIKE '%" + txtMusicianName.Text + "%' OR `Name`LIKE '%" + txtMusicianName.Text + "%'"
Я попробовал добавить if (txtName.Text != " ") затем выполните вызов базы данных. С помощью этого кода я получаю половину желаемого результата. Если пользователь вводит пробел, ничего не происходит, что хорошо, но когда пользователь отступает назад, то все имена появляются снова. Как я могу предотвратить появление имен таким образом?

0x01AA

Почему? e.Handled = false;? Вы управляли backspace так что для меня это более логично сделать e.Handled = true;
Кстати, с точки зрения опыта, обработка ключевых событий более успешна, чем их выполнение в "_KeyUp". Также иногда вам нужно позаботиться о KeyPreview для формы.

Steven8579

Не могли бы вы объяснить чуть подробнее? Я изменил его на e.handled = true; и изменил свой код на событие KeyUp. Я все еще получаю ту же проблему с тем, что список не очищается

1 Ответов

Рейтинг:
0

OriginalGriff

Это прекрасно работает для меня, при условии, что фокус находится в текстовом поле (хотя 0x01AA прав, он должен быть истинным, а не ложным).

Используйте отладчик, чтобы проверить, когда код входит в обработчик KeyDown - по-видимому, вы фокусируетесь не на текстовом поле, а на каком-то другом входном элементе управления, поэтому он обрабатывает его вместо текстового поля.

Но... еще две вещи, с которыми вам нужно разобраться:
1) Не используйте Backspace для этого - пользователи привыкли использовать Backspace для удаления последнего введенного ими символа. Изменение этого, чтобы удалить весь контент, было бы очень, очень раздражающим, если бы я просто набрал "Aliaune Damala Bouga Time Bongo Puru Nacka Lu Lu Lu Badara Akon Thian" и захотел изменить последнюю букву "n" на правильную "m", и все это исчезло ...
Подрыв стандартного использования - это плохая идея-она заставляет пользователей ненавидеть ваше приложение, unistakll его и требовать свои деньги обратно!

2) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?