如何在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";
      }
    } 

如何在datagridview中只允许2个十进制值

向绑定列添加属性DataFormatString="{0:n3}"

如果您正在使用Eval,则<%#Eval("NumFailedFiles","{0:n3}")%

使用标准DataGridView列类型无法将用户限制在小数点后两位。要做到这一点,您需要创建自己的DataGridViewMaskedTextBoxColumn,它扩展了标准DataGridViewColumn,并托管一个Winform MaskedTextBox作为其编辑控件。

我已经成功地使用了这些资源:

DataGridViewColumn宿主屏蔽文本框
DataGridView自定义列示例

但是,如果您只是想格式化一列中的值以显示两位小数,则可以将DataGridViewTextBoxColumnDataGridViewCellStyle.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;
        }