如何在datagridview中只允许2个十进制值
本文关键字:2个 十进制 datagridview | 更新日期: 2023-09-27 18:29:36
朋友们,我在与2005年相比的windows应用程序中使用了datagridview。在第3列和第4列的数据网格视图中,我想允许用户输入最多2位的十进制值(如19.88或29765.01)。如何将其限制在小数点后2位?此外,如果用户输入".1",它应该转换为"0.10"。任何建议都会有很大帮助。我已经使该列只接受数字和一个小数点(.)。
编辑:这是我的代码。程序流不会进入if子句内部。我在单元格中给出了7889.6655的值。它不应该允许我写超过7889.66:
Regex reg = new Regex("^[0-9]+''.[0-9]{1,2}$");
Regex reg1 = new Regex("^[0-9]+''.[0-9]{2}$");
if(reg.IsMatch(dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value.ToString()))
{
if (!reg1.IsMatch(dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value.ToString()))
{
dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value += "0";
}
}
向绑定列添加属性DataFormatString="{0:n3}"
如果您正在使用Eval,则<%#Eval("NumFailedFiles","{0:n3}")%
使用标准DataGridView列类型无法将用户限制在小数点后两位。要做到这一点,您需要创建自己的DataGridViewMaskedTextBoxColumn
,它扩展了标准DataGridViewColumn
,并托管一个Winform MaskedTextBox作为其编辑控件。
我已经成功地使用了这些资源:
DataGridViewColumn宿主屏蔽文本框
DataGridView自定义列示例
但是,如果您只是想格式化一列中的值以显示两位小数,则可以将DataGridViewTextBoxColumn
的DataGridViewCellStyle.Format
属性设置为"N2"。您还可以在DataGridView的CellFormatting
事件处理程序中格式化列的数据。
您可以像下面这样检查
Regex reg = new Regex("^[0-9]*(''.[0-9]{1,2})?$");
if (reg.IsMatch(dataGridView1.Rows[0].Cells[3].Value.ToString()))
{
}
编辑:
我已经为一个文本框测试了下面的代码,它运行良好。在下面的代码中放入datagridview的行值,而不是textbox.text。
Regex reg = new Regex("^[0-9]+''.[0-9]{1,2}$");
Regex reg1 = new Regex("^[0-9]+''.[0-9]{2}$");
if (reg.IsMatch(textBox1.Text.ToString()))
{
if (!reg1.IsMatch(textBox1.Text))
{
textBox1.Text += 0;
}
}
第2版:
在其他情况下,你可以在下面写一些东西
Regex reg = new Regex("^[0-9]+''.[0-9]{1,2}$");
Regex reg1 = new Regex("^[0-9]+''.[0-9]{2}$");
if (reg.IsMatch(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString()))
{
if (!reg1.IsMatch(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString()))
{
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value += "0";
}
}
else
{
MessageBox.Show("Please, provide a valid value");
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value = "";
return;
}