Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换为并仅在datagridview的特定列中显示整数_C#_Winforms_Datagridview_Datagridviewcolumn - Fatal编程技术网

C# 转换为并仅在datagridview的特定列中显示整数

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

我在datagridview中有一列,它应该转换为整数值,并且只显示整数值(即,没有小数点)。我将DefaultCellStyle.Format设置为“F0”。我正在dgv_CellFormatting处理程序中处理这些格式检查,如图所示

 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;