I have a DataGridView control in which I want to restrict the user to entering only numeric values for a cell under a particular column. How can I accomplish this t
Use cellValidating event:
Grid.CellValidating += new DataGridViewCellValidatingEventHandler(Grid_CellValidating);
Grid_CellValidating(object sender, args)
{
XXXX
}
You can set the type of data the column will hold as the following code snippet illustrates:
var columnSpec = new DataColumn();
columnSpec.DataType = <your type>
// Other initialisation
dataTable.Columns.Add(columnSpec);
dataGridView.DataSource = dataTable;
If you are working directly on the DataGridView then the DataGridViewColumn class has the following property:
ValueType - Gets or sets the data type of the values in the column's cells.
If you create your columns using this class rather than the more specialised classes DataGridViewCheckBoxColumn etc. this might do want you want.
Example:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress -= new KeyPressEventHandler(Column1_KeyPress);
if (dataGridView1.CurrentCell.ColumnIndex == 0) //Desired Column
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += new KeyPressEventHandler(Column1_KeyPress);
}
}
}
private void Column1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}