Kreij
10-16-2007, 04:14 PM
Here is what I am trying to do;
When a user enters data into a DataGridView cell (TextBox) and then hits tab to advance to the next column, I want to verify the data and respond appropriately.
Overriding the CellEndEdit event I can easily validate the data.
The problem that I am seeing is that if the data is invalid, I want to return the users to the cell with the invalid data and set it back in edit mode.
I can't seem to get this to work the way I am trying, and can't seem to find anything.
The following code simply check to see if that a valid work order number was entered by
seeing if an ExecuteScalar call returns anything.
private void laborDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
object temp;
// Check for Valid WO #
if (e.ColumnIndex == 3)
{
SqlCommand sqlCom = new SqlCommand(
"select WOListID from WorkOrders where WONum='" +
laborDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() + "' " +
"and Completed='false'", sqlCon);
sqlCon.Open();
temp = sqlCom.ExecuteScalar();
if (temp == null)
{
MessageBox.Show("WO # " +
laborDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() +
" is either completed or does not exist", "Data Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
laborDataGridView[e.ColumnIndex, e.RowIndex].Value = "";
// The next line does not return the user to the cell with invalid data
laborDataGridView[e.ColumnIndex, e.RowIndex].Selected = true;
sqlCon.Close();
return;
}
sqlCon.Close();
}
// rest of code removed. .........
The value of the offending cell is set to null (""), but the next column's cell gets the focus and selection.
Any ideas ?
When a user enters data into a DataGridView cell (TextBox) and then hits tab to advance to the next column, I want to verify the data and respond appropriately.
Overriding the CellEndEdit event I can easily validate the data.
The problem that I am seeing is that if the data is invalid, I want to return the users to the cell with the invalid data and set it back in edit mode.
I can't seem to get this to work the way I am trying, and can't seem to find anything.
The following code simply check to see if that a valid work order number was entered by
seeing if an ExecuteScalar call returns anything.
private void laborDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
object temp;
// Check for Valid WO #
if (e.ColumnIndex == 3)
{
SqlCommand sqlCom = new SqlCommand(
"select WOListID from WorkOrders where WONum='" +
laborDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() + "' " +
"and Completed='false'", sqlCon);
sqlCon.Open();
temp = sqlCom.ExecuteScalar();
if (temp == null)
{
MessageBox.Show("WO # " +
laborDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() +
" is either completed or does not exist", "Data Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
laborDataGridView[e.ColumnIndex, e.RowIndex].Value = "";
// The next line does not return the user to the cell with invalid data
laborDataGridView[e.ColumnIndex, e.RowIndex].Selected = true;
sqlCon.Close();
return;
}
sqlCon.Close();
}
// rest of code removed. .........
The value of the offending cell is set to null (""), but the next column's cell gets the focus and selection.
Any ideas ?