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

时间:2012-03-29 12:48:54

标签: c# winforms datagridview decimal

朋友们,我在vs 2005的Windows应用程序中使用了datagridview。在第3列和第4列的datagridview中,我想允许用户输入最多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";
      }
    } 

3 个答案:

答案 0 :(得分:0)

到绑定列添加属性DataFormatString =“{0:n3}”

如果你使用的是Eval,那么<%#Eval(“NumFailedFiles”,“{0:n3}”)%

答案 1 :(得分:0)

您可以在下方查看,

            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;
            }
        } 

EDIT2:

在其他情况下,你可以写下面的内容

        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;
        }

答案 2 :(得分:0)

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

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

DataGridViewColumn Hosting MaskedTextBox
DataGridView Custom Column Sample

但是,如果您只想格式化列中的值以显示两位小数,则可以将DataGridViewTextBoxColumn的{​​{3}}设置为“N2”。您还可以在DataGridView的DataGridViewCellStyle.Format property处理程序中格式化列的数据。