我的网格中有一个PreviewKeyDown
事件,我想只让数值和(0,2)十进制值。
private void dgvUser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
colUser = dgvUser.CurrentCell.ColumnIndex;
rowUser = dgvUser.CurrentCell.RowIndex;
DataGridViewCell tc = dgvUser[colUser, rowUser];
valueUser = Convert.ToDouble(tc.Value);//code breaks here
if (e.KeyData == Keys.Enter && dgvUser.CurrentCell.ColumnIndex == 2 && handledUser == true)
{
DragerClass.Dedektör.Dedektor_A1Set[Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1] = valueUser;
BindUserGrid(userPagingUpdate[0], userPagingUpdate[1]);
logValues(Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1);
handledUser = false;
}
}
当我在valueUser = Convert.ToDouble(tc.Value);
行输入非数值代码时。我怎么能阻止它?
答案 0 :(得分:1)
您可以使用Double.TryParse
方法:
if (Double.TryParse(tc.Value.ToString(), out valueUser))
{
//success
}
else
{
//fail
}
答案 1 :(得分:0)
您可以使用Try / Catch语句
try
{
valueUser = Convert.ToDouble(tc.Value);
}
catch
{
// if the above line throws an exception deal with it here.
}
或者您可以使用double.TryParse()
double valueUser;
bool isNumber = double.TryParse(tc.Value,out valueUser);
答案 2 :(得分:0)
另一种解决方案是将您用作列模板的DataGridViewCell.ValueType
设置为typeof(decimal)
每次用户尝试输入不同的值时,这将创建DataError Event
你指定了什么。然后,您可以将DataError Event
处理为您喜欢的任何内容。