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

如何在Python中为DataGridView动态添加行(无额外依赖)

解决DataGridView动态添加行的参数适配问题

我刚遇到过几乎一模一样的问题!在Python中调用.NET的params风格方法时,直接传列表或元组会被当成单个参数处理,这就是为什么你所有内容都挤在第一列的原因。

问题根源

.NET的DataGridView.Rows.Add(params object[] values)方法设计为接受可变数量的参数(对应每一列的值),但Python不会自动展开序列(比如signals[j]这个列表/元组),而是把整个序列作为第一个参数传入,自然就都显示在第一列了。

解决方案

用Python的**解包操作符***来展开你的signals[j],这样序列里的每个元素都会被当作单独的参数传递给Add方法,完美适配任意数量的列。

修改你代码中的循环部分:

for j in range(len(signals)):
    # 用*解包signals[j],每个元素对应一列
    self._dataGridView1.Rows.Add(*signals[j])

修改后的完整代码

import clr
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')
clr.AddReference('System.Data')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import TaskDialog
from System.Windows.Forms import *
from System.Drawing import (
    Point,
    Size,
    Font,
    FontStyle,
    GraphicsUnit
)
from System.Data import DataSet
from System.Data.Odbc import OdbcConnection, OdbcDataAdapter
msgBox = TaskDialog
headers = IN[0]
signals = IN[1]

class DataGridViewQueryForm(Form):
    def __init__(self):
        self.Text = 'Signals'
        self.ClientSize = Size(942, 255)
        self.MinimumSize = Size(500, 200)
        self.setupDataGridView()

    def setupDataGridView(self):
        self._dataGridView1 = DataGridView()
        self._dataGridView1.AllowUserToOrderColumns = True
        self._dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
        self._dataGridView1.Dock = DockStyle.Fill
        self._dataGridView1.Location = Point(0, 111)
        self._dataGridView1.Size = Size(506, 273)
        self._dataGridView1.TabIndex = 3
        self._dataGridView1.ColumnCount = len(headers)
        self._dataGridView1.ColumnHeadersVisible = True

        for i in range(len(headers)):
            self._dataGridView1.Columns[i].Name = headers[i]

        # 关键修改:用*解包每个信号条目
        for j in range(len(signals)):
            self._dataGridView1.Rows.Add(*signals[j])

        self.Controls.Add(self._dataGridView1)

Application.Run(DataGridViewQueryForm())

额外提示

  • 确保每个signals[j]的元素数量和你设置的列数(len(headers))完全一致,否则可能会抛出参数不匹配的异常,或者显示内容错位。
  • 这个方法不需要引入任何额外包,完全依赖你已经引用的.NET类库,非常适合在Revit Dynamo的多用户环境中使用。

内容的提问来源于stack exchange,提问作者fidjeland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:53