Невозможно заполнить WPF DataGrid с помощью Python

1

У меня проблема с привязкой данных к WPF DataGrid с использованием Python.NET

Код показан ниже, и я попробовал три разных подхода к привязке данных - каждый из них дает сбой, и сообщение об ошибке включено в качестве комментария в код ниже

Если я не пытаюсь добавить данные, датагарид отображается правильно с заголовками. Но я не могу заполнить сетку какими-либо данными.

Любая помощь будет с благодарностью получена !!!

Doug

import clr

#.NET references
import System
import System.Windows.Controls as WPFControls
import System.Windows.Data as WPFBindings


def getCustomToolPropertyContent():

   #Create a Grid
   my_Grid = WPFControls.Grid()

   #Add 1 Row and One Column
   my_Grid.RowDefinitions.Add(WPFControls.RowDefinition())
   my_Grid.ColumnDefinitions.Add(WPFControls.ColumnDefinition())

   # Create a DataGrid
   myDataGrid = WPFControls.DataGrid()

   #Create three columns
   column_1 = WPFControls.DataGridTextColumn()
   column_1.Header = "ID"
   column_1.Binding = WPFBindings.Binding("id")

   column_2 = WPFControls.DataGridTextColumn()
   column_2.Header = "Title"
   column_2.Binding = WPFBindings.Binding("title")

   column_3 = WPFControls.DataGridTextColumn()
   column_3.Header = "Content"
   column_3.Binding = WPFBindings.Binding("content")

   #Add the three columns to the datagrid
   myDataGrid.Columns.Add(column_1)
   myDataGrid.Columns.Add(column_2)
   myDataGrid.Columns.Add(column_3)

# Data table approach....  
# Fails with
#  AttributeError : DataTable

   #Create a DataTable
   data_table = WPFBindings.DataTable("MyDataTable")
   data_table.Columns.Add("id")
   data_table.Columns.Add("title")
   data_table.Columns.Add("content")

   #Add data 
   data_table.Rows.Add("Andre", "Piratas", "1973")
   data_table.Rows.Add("Andres", "Piratass", "1973s")

   #DataTable to DataGrid
   myDataGrid.DataContext = data_table.DefaultView   


# Item Source Approach   
# Fails with 
#  TypeError: 'list' value cannot be converted to System.Collections.IEnumerable  
#   items = []

#   items.append(Student(id="1", title="Piratas", content="1973"))
#   items.append(Student(id="2", title="XXXX", content="1974"))  

#   myDataGrid.ItemsSource = items


# Items.Add approach
# Fails with 
#  TypeError: No method matches given arguments

#   myDataGrid.Items.Add(Student(id="1", title="Piratas", content="1973"))  



   # Position the DataGrid in the first row, column of the Grid
   WPFControls.Grid.SetRow(myDataGrid, 0)
   WPFControls.Grid.SetColumn(myDataGrid, 0)

   #Add the DataGrid to the Grid 
   my_Grid.Children.Add(myDataGrid)


   # Return the Grid   
   return my_Grid
Теги:
wpf
data-binding
python.net

3 ответа

2

в порядке,

Я понял - у меня был неправильный импорт для DataTable. Изменено

"import System.Windows.Data as WPFBindings"

в

"import System.Data as WPFData"

Затем воспользовался советом ХАМАС и изменился,

"myDataGrid.DataContext = data_table.DefaultView" 

в

myDataGrid.ItemsSource= data_table.DefaultView 

Спасибо хаммас !!

2

Я не вижу, как вы создаете экземпляр data_Table.

DataTable data_table = CreateDataTable();

Плюс попробуйте это!

myDataGrid.ItemsSource = data_table.DefaultView;

и в XAML

<DataGrid Name="myDataGrid" ItemsSource="{Binding}">
  • 0
    Это Python, поэтому строка «data_table = WPFBindings.DataTable (« MyDataTable »)» создает DataTable. Я попытался перейти с «DataSource» на ItemsSource - та же ошибка
  • 0
    в чем ошибка? ... чтобы быть конкретным!
Показать ещё 3 комментария
1

Для полноты вот рабочий код. Обратите внимание, что с помощью DataTable я смог удалить все настройки столбца, заголовка и привязки вручную.

import clr

#.NET references
import System.Windows.Controls as WPFControls
import System.Data as WPFData

def getCustomToolPropertyContent():

   #Create a Grid
   my_Grid = WPFControls.Grid()

   #Add 1 Row and One Column
   my_Grid.RowDefinitions.Add(WPFControls.RowDefinition())
   my_Grid.ColumnDefinitions.Add(WPFControls.ColumnDefinition())

   # Create a DataGrid
   myDataGrid = WPFControls.DataGrid()

# Data table approach....  
   #Create a DataTable
   data_table = WPFData.DataTable("MyDataTable")
   data_table.Columns.Add("ID")
   data_table.Columns.Add("Title")
   data_table.Columns.Add("Content")

   #Add data 
   data_table.Rows.Add("Andre", "Piratas", "1973")
   data_table.Rows.Add("Andres", "Piratass", "1973s")

   myDataGrid.ItemsSource = data_table.DefaultView     

   # Position the DataGrid in the first row, column of the Grid
   WPFControls.Grid.SetRow(myDataGrid, 0)
   WPFControls.Grid.SetColumn(myDataGrid, 0)

   #Add the DataGrid to the Grid 
   my_Grid.Children.Add(myDataGrid)

   # Return the Grid   
   return my_Grid

Ещё вопросы

Сообщество Overcoder
Наверх
Меню