PowerShell独立运行空间GUI空表启动GridView时崩溃问题排查
问题原因
当DataGridView绑定空DataTable启动时,控件内部的选择状态处于未初始化的异常状态。此时调用$grid.ClearSelection(),控件会尝试操作一个不存在的选中项集合,导致内部状态紊乱。后续执行$ht.table.rows.Add(@($text, 'b'))添加行时,控件的UI更新逻辑和错误的选择状态发生冲突,最终引发进程崩溃。而初始添加一行时,控件的选择状态有了合法的操作对象,所以不会触发这个问题。
解决办法
以下几种方案可以保留取消选中功能同时避免崩溃:
方案1:判断行存在后再执行取消选中
在调用ClearSelection()前,先检查DataGridView是否有行,仅当存在行时执行取消选中操作:
# 替换原来的ClearSelection调用 if ($grid.Rows.Count -gt 0) { $grid.ClearSelection() }
方案2:调整执行顺序,添加行后再取消选中
如果业务逻辑允许,把ClearSelection()移到添加行的代码之后,此时控件已经有了合法的行对象,操作选择状态不会出错:
# 先添加行 $null = $ht.table.rows.Add(@($text, 'b')) # 再取消选中 $grid.ClearSelection()
方案3:初始化时添加临时行(兼容旧逻辑)
如果必须保持原有执行顺序,可以在初始化DataTable时先添加一行临时数据,后续添加真实行后再移除临时行:
# 初始化DataTable时添加临时行 $ht.table.Rows.Add(@('', '')) # 后续添加真实行时,先移除临时行(如果存在) if ($ht.table.Rows.Count -eq 1 -and $ht.table.Rows[0][0] -eq '') { $ht.table.Rows.RemoveAt(0) } $null = $ht.table.rows.Add(@($text, 'b')) $grid.ClearSelection()
内容的提问来源于stack exchange,提问作者Carsten
相关产品推荐
相关产品推荐

