Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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的INT列中粘贴NULL会生成“无效值”错误_C#_Type Conversion_Datagridviewcolumn - Fatal编程技术网

C# 在DatagridView的INT列中粘贴NULL会生成“无效值”错误

C# 在DatagridView的INT列中粘贴NULL会生成“无效值”错误,c#,type-conversion,datagridviewcolumn,C#,Type Conversion,Datagridviewcolumn,使用复制/粘贴/删除ContextMenuStrip,我复制datagridview的一行,然后粘贴为新行,更改为1列以保持唯一性。DGV绑定到DT,DT有多个定义为INT的列,DGV列继承这些列 复制的某些INT列为NULL,如果保持原样,则会产生转换错误。Convert和Parse都将NULL转换为0,但我需要NULL值保持NULL,因为这是SQL的接口。第二个问题是,粘贴后,“*”保留在行上,就好像它没有提交一样,并一直保持这种状态,直到我在ListView中做出另一个选择为止 如何使粘贴

使用复制/粘贴/删除ContextMenuStrip,我复制datagridview的一行,然后粘贴为新行,更改为1列以保持唯一性。DGV绑定到DT,DT有多个定义为INT的列,DGV列继承这些列

复制的某些INT列为NULL,如果保持原样,则会产生转换错误。Convert和Parse都将NULL转换为0,但我需要NULL值保持NULL,因为这是SQL的接口。第二个问题是,粘贴后,“*”保留在行上,就好像它没有提交一样,并一直保持这种状态,直到我在ListView中做出另一个选择为止

如何使粘贴在INT列中接受NULL? 我如何强制提交以便*移动到空行

            // paste
            for (int iRow = 0; iRow < rowInClipboard.Length; iRow++)
            {
                if (iRow + currentRow < grid.Rows.Count)
                {
                    string[] cellsInRow = rowInClipboard[iRow].Split(columnSplitter);
                    for (int iCol = 0; iCol < cellsInRow.Length; iCol++)
                    {
                        if (grid.ColumnCount > currentColumn + iCol)
                        {
                            DataGridViewCell currentCell = grid.Rows[currentRow + iRow].Cells[currentColumn + iCol];
                            if (!currentCell.ReadOnly) // H.NH added to avoid Read only case.
                                switch (grid.Columns[iCol].ValueType.Name)
                                {
                                    case "Int32":
                                        string s = cellsInRow[iCol];
                                        int result;
                                        if (int.TryParse(s, out result))
                                        {
                                            // The string was a valid integer => use result here
                                        }
                                        else
                                        {
                                        }
                                        currentCell.Value = 999;
                                        //currentCell.Value = cellsInRow
                                    break;
                                    case "String":
                                    if (iCol == 3)
                                    {
                                        cellsInRow[3] += "*******";
                                    }
                                        currentCell.Value = cellsInRow[iCol];
                                    break;

有没有理由不只是使用数据绑定?您似乎试图手动执行的大部分操作都已经通过数据绑定提供给您,将所有难看的地方都放在一边。但是用户与DataGridView交互。我对这门语言还是很熟悉,但不知道当用户不与绑定交互时,绑定有什么帮助。我不明白为什么副本一开始就不将其作为整数复制。我找到了一个空值的解决方法。我测试它,如果为空,我什么也不做,继续迭代。我仍然需要找到如何强制粘贴完成插入并将*移动到一个空行;它是关于用最少的努力将数据放入控件。在您的情况下,该控件将是DataGridView。此外,我怀疑您遇到数据问题的原因与DBNull.Value和Int32之间的转换有关,或者您从数据库接收null值,并且您的网格视图期望Int32值不能为null而不是int?可以保存空值的可空值。很可能两者都是。datatable是从SQL表填充的,DataGridView绑定到DT。INT-DT列定义为:tblvAttributes.columns.AddDWFieldScale,typeofint;我没有对DGV列进行任何定义,因为我希望它们的属性/属性继承自DT。是,传递给DT的SQL表中有空值传递给DGV。我不知道DGV为什么需要INT32而不是INT,但当我测试值类型grid.Columns[iCol].ValueType.Name时,它返回INT32