Python: правильный формат при вводе в datagridview - PullRequest
0 голосов
/ 23 мая 2018

Я хочу добавить строки в сетку данных "вручную".Я попытался преобразовать следующий код в Python: https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-manipulate-rows-in-the-windows-forms-datagridview-control

Однако я борюсь с добавлением строк.Следующее не работает:

    for j in range(len(signals)):
        self._dataGridView1.Rows.Add(signals[j])

Следующий код работает, но недостаточно динамически, так как я не знаю, сколько будет элементов:

    for j in range(len(signals)):
        self._dataGridView1.Rows.Add(signals[j][0], signals[j][1], signals[j][2], signals[j][3])

Какя должен это исправить?Я попробовал кортеж, но в результате получился кортеж со всей информацией, показанной в первой ячейке, а не распределенной по столбцам.

Я не хотел бы добавлять пакеты, так как это должно выполняться в Revid Dynamo срединесколько пользователей, и я не могу убедить всех установить пакеты.

полный код для контекста:

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][0], signals[j][1], signals[j][2], signals[j][3])

            self.Controls.Add(self._dataGridView1)





Application.Run(DataGridViewQueryForm())

1 Ответ

0 голосов
/ 24 мая 2018

Разобрался.Пришлось использовать System.Array.

from System import Array

изменения кода:

array_str = Array.CreateInstance (str, len (headers))

    for j in range(len(signals)):

        for k in range(len(headers)):
            array_str[k] = signals[j][k]
        self._dataGridView1.Rows.Add(array_str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...