C# 排序时DataGridView崩溃?
我有一个DataGridView,它有多行,每行代表一个进程。当其中一个进程退出时,通过将my PID列从整数进程id更改为字符串C# 排序时DataGridView崩溃?,c#,datagridview,C#,Datagridview,我有一个DataGridView,它有多行,每行代表一个进程。当其中一个进程退出时,通过将my PID列从整数进程id更改为字符串--来更新行以反映这一点。如果所有进程都在运行,并且该列中的每个单元格都是一个数字,那么我可以对PID列进行排序。如果这些过程中的任何一个都已结束,并且甚至有一个单元格包含--,那么当我尝试对该列进行排序时,应用程序将失败。它突出显示了Application.Run(newmyform())Program.cs中的行,带有ArgumentException说明“对象必
--
来更新行以反映这一点。如果所有进程都在运行,并且该列中的每个单元格都是一个数字,那么我可以对PID列进行排序。如果这些过程中的任何一个都已结束,并且甚至有一个单元格包含--
,那么当我尝试对该列进行排序时,应用程序将失败。它突出显示了Application.Run(newmyform())代码>Program.cs中的行,带有ArgumentException
说明“对象必须为Int32类型”。PID列是一个未绑定的DataGridViewTextBoxColumn,其SortMode是自动的。如何对其进行排序,使其不会崩溃,并将PID值为--
的所有行分组在一起?我不在乎它们是在排序列表的开头还是结尾。我自己从来没有这样做过,但我认为您可以使用某种单元格格式化程序。
因此,您可以为退出的进程存储一个值,如-1
,该值将自动格式化为您想要的任何值,如--
也许这可以帮助你:
我只是快速阅读,但我想这正是我的意思。你必须在每列填写相同类型的数据。
当datatable的列有一些字符串和一些null时,它将是空的。
所以
如果数据为空,则必须将其设置为“”。
希望能解释一下。对不起我的英语。我现在非常困惑和恼火。我把它从--
改为-1
,但它仍然给了我一个例外,这次是这样的消息:“对象必须是字符串类型。”FFS…@coreyogurn me也=)也许现在它是一个不同的列?如果所有的PID
s现在都来自类型int
,那么它应该可以工作了,不管怎样,我发现当我创建行时,我给了该列一个int,但是当我更新行时,我给了该列一个字符串。现在它可以正确排序,因为所有内容都是int。如果列的某个单元格有空值,它也会崩溃。>当我试图对列(无界表)进行排序时,从一个允许空值的DataTable中提取数据时发生了这种情况!修复是在SQL表和查询中完成的:我用“none”填充空单元格。虽然CellFormatting
适用于他的特定用途(如PIDs),但在一般情况下,这不是一个很好的解决方案,因为在许多情况下,所有整数值(或双精度)都是有效的,需要排序。或者@ArthurZennig提到的数据库案例,似乎更好的方法是禁用自动排序,自己单击处理列,并提供自定义IComparer(有一个Sort
重载接受自定义比较器,但不幸的是DataGridViewColumnSortMode.Automatic
不允许您提供)。您可以发布流程
对象的代码以及将集合数据绑定到列表的代码吗?它不是我的流程对象,而是系统.Diagnostics.Process
,如前所述,该列未绑定。