如何使某些数据网格视图列仅接受 C# 中的数值
本文关键字:何使某 数据 数据网 视图 网格 | 更新日期: 2023-09-27 18:34:16
以下代码使DataGridView
Column4
只接受数值和一个小数点.
并且它工作正常,例如它接受诸如(4.50,3.00,13.60)之类的值
但问题是:我仍然可以在单元格内单独保存一个小数点(没有任何数字,只有小数点),我不希望单元格只有小数点,因为 sql 数据库(金钱列)不接受小数点。
任何人都知道如何防止Column4
中的单元格不仅接受小数点,而是接受以下值:(4.50,3.00,13.60)?
请帮忙谢谢
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress -= new KeyPressEventHandler(AnyColumnKeyPress);
if (dataGridView1.CurrentCell.ColumnIndex == 4 ) //Desired Column
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += new KeyPressEventHandler(AnyColumnKeyPress);
}
}
}
private void AnyColumnKeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// allow 1 dot:
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}
将函数更改为:
private void AnyColumnKeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// allow 1 dot:
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
if ( (sender as TextBox).Text != "." ) {
e.Handled = true;
}
}
}
检查了上面的代码,我仍然可以输入一个点字符,稍微修改一下,让我更易读。
if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar)) || e.KeyChar == '.')
{
e.Handled = true;
}
经过测试,我只能输入数字。