Click here to Skip to main content
14,579,188 members
Rate this:
Please Sign up or sign in to vote.
See more:
When the user presses the backspace key, I want the textbox and the datagridview to clear. With this code that I have, I have to press the backspace key twice in order for the datagridview to clear.

What I have tried:

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

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


            }
            
        }


I also have a db call:
"SELECT * FROM `login` WHERE `Email` LIKE '%" + txtMusicianName.Text + "%' OR `Name`LIKE '%" + txtMusicianName.Text + "%'"
I tried adding in if (txtName.Text != " ") then make the database call. With that code, I get half of the result I want. If a user types a space nothing happens which is good but when the user backspaces then all of the names appear again. How do I prevent the names from showing up like that?
Posted
Updated 28-Jun-20 20:33pm
v2
Comments
0x01AA 28-Jun-20 16:43pm
   
Why e.Handled = false;? You handled backspace so for me it is more logical to do e.Handled = true;
Btw. from expirience, handling key events are more successfull doing them in "_KeyUp". Also sometimes you need to take care for KeyPreview for the form.
Steven8579 28-Jun-20 18:10pm
   
Can you explain a little further? I changed it to e.handled = true; and changed my code into the KeyUp event. I still get the same problem with the list not being cleared

1 solution

Rate this:
Please Sign up or sign in to vote.

Solution 1

It works fine for me, provided that the focus is in the text box (though 0x01AA is right, it should be true not false).

Use the debugger to check when the code enters the KeyDown Handler - at a guess your focus is not with the TextBox but some other input accepting control so it handles it instead of the Textbox.

But ... two other things you need to deal with:
1) Don't use Backspace for this - users are used to using Backspace to remove the last character they typed. Changing that to remove the whole content would be very, very annoying if I'd just typed "Aliaune Damala Bouga Time Bongo Puru Nacka Lu Lu Lu Badara Akon Thian" and wanted to change the last "n" to the correct "m" and the whole lot disappeared ...
Subverting standard usage is a bad idea - it makes users hate your app, unistakll it, and demand their money back!

2) Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.

When you concatenate strings, you cause problems because SQL receives commands like:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: "x';DROP TABLE MyTable;--" Then SQL receives a very different command:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Which SQL sees as three separate commands:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
DROP TABLE MyTable;
A perfectly valid "delete the table" command
--'
And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.

So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don't you?
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100