You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:03:15