Skip to main content
 首页 » 编程设计

python之无法使用 Python 填充 WPF DataGrid

2025年05月04日20Terrylee

我在使用 Python.NET 将数据绑定(bind)到 WPF DataGrid 时遇到问题

代码如下所示,我尝试了三种不同的方法来绑定(bind)数据——每种方法都失败了,错误消息作为注释包含在下面的代码中

如果我不尝试添加数据,datagarid 会正确显示标题。但是我无法用任何数据填充网格。

如有任何帮助,我们将不胜感激!!!

道格

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 

请您参考如下方法:

好的,

我明白了 - 我错误地导入了 DataTable。 改变了

"import System.Windows.Data as WPFBindings" 

到

"import System.Data as WPFData" 

然后听取了哈马斯的建议,做出了改变,

"myDataGrid.DataContext = data_table.DefaultView"  

到

myDataGrid.ItemsSource= data_table.DefaultView  

谢谢哈马斯!!