Click here to Skip to main content
15,887,485 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
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:

C#
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:
C#
"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
[no name] 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

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:
SQL
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:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Which SQL sees as three separate commands:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
SQL
DROP TABLE MyTable;
A perfectly valid "delete the table" command
SQL
--'
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?
 
Share this answer
 

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900