朋友们,我在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";
}
}
答案 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处理程序中格式化列的数据。