C# 转换为并仅在datagridview的特定列中显示整数
我在datagridview中有一列,它应该转换为整数值,并且只显示整数值(即,没有小数点)。我将DefaultCellStyle.Format设置为“F0”。我正在dgv_CellFormatting处理程序中处理这些格式检查,如图所示C# 转换为并仅在datagridview的特定列中显示整数,c#,winforms,datagridview,datagridviewcolumn,C#,Winforms,Datagridview,Datagridviewcolumn,我在datagridview中有一列,它应该转换为整数值,并且只显示整数值(即,没有小数点)。我将DefaultCellStyle.Format设置为“F0”。我正在dgv_CellFormatting处理程序中处理这些格式检查,如图所示 private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // if it's first row or first
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// if it's first row or first column, display integer, no decimals
if ((e.ColumnIndex > 0 && e.RowIndex == 0) || (e.ColumnIndex == 0 && e.RowIndex > 0))
{
double tempVal = Double.Parse(e.Value.ToString());
string tempStr = System.Math.Round(tempVal).ToString("F0");
e.Value = tempStr;
}
}
我为该列中的每个单元格设置了初始值。如果我将格式保留为“F0”,这些初始值将显示为整数(这很好)。如果我将格式更改为“F1”,它将显示带一个小数位的值(添加.0)。这是有道理的
但是,当我将格式设置为“F0”并单击编辑单元格并输入“1.0”或“1.00”时,它不会将格式更正回“1”。当格式设置为“F1”且我输入“5”时,它将更正格式并正确显示“5.0”。但如果我输入“5.00”,它会显示“5.00”,并且不会更正回“5.0”。它似乎仅在需要尾随零加法而不是减法时才更正格式
更奇怪的是,如果我试图捕捉“x.00”的条目,则:
它甚至不捕捉“x.00”条目,但仍然在datagridview单元格中显示“x.00”
如何在用户输入时强制只显示不带小数的整数?Ugh发现了我的问题(实际上是两个)。在其他一些格式检查代码中,我使用了一个错误的方法来检查以确保输入是一个数字,以避免解析非数字字符
// don't format upper leftmost cell
// don't try to format a null or blank cell
// don't try to format unless it's a valid number
if (e.RowIndex < 0 || e.ColumnIndex < 0 || e.Value == null || e.Value == DBNull.Value ||
String.IsNullOrWhiteSpace(e.Value.ToString()) || !e.Value.ToString().All(char.IsDigit))
{
return;
}
尝试添加
e.FormattingApplied=true代码>后e.Value=tempStr代码>不走运:/谢谢您的建议,尽管有一个单元格解析事件()。将输入解析为整数。让我们知道它是否有效-我很好奇。同样的行为使用单元格解析事件并解析为整数。如果我将tempStr打印到MessageBox,我可以通过注释掉格式行,在“1.0”和“1”之间切换分配的值,这意味着代码正在执行并正确格式化。只是当e.Value=tempStr(tempStr显示“1”)时,dgv中显示的值显示为“1.0”。
// don't format upper leftmost cell
// don't try to format a null or blank cell
// don't try to format unless it's a valid number
if (e.RowIndex < 0 || e.ColumnIndex < 0 || e.Value == null || e.Value == DBNull.Value ||
String.IsNullOrWhiteSpace(e.Value.ToString()) || !e.Value.ToString().All(char.IsDigit))
{
return;
}
double tempVal = Double.Parse(e.Value.ToString());
string tempStr = System.Math.Round(tempVal).ToString("F0");
e.Value = tempStr;