2016-12-26 2 views
1

Я пишу приложение с использованием python.net. Моя цель - программно заполнить DataGrid данными. Код, в котором я работаю, приведен ниже:Добавление элементов в DataGrid WPF с использованием Python

import clr 
import System.Threading 
System.Threading.Thread.CurrentThread.SetApartmentState(System.Threading.ApartmentState.STA) 

clr.AddReference(r"wpf\PresentationFramework") 
clr.AddReference(r"wpf\PresentationCore") 
clr.AddReference("System.Xml") 

from System.IO import StringReader 
from System.Xml import XmlReader 
from System.Windows.Markup import XamlReader, XamlWriter 
from System.Windows import Window, Application, LogicalTreeHelper, MessageBox 
from model import Model 
from System.Windows.Media import Brushes 
from random import random 
from System.Windows.Controls import DataGridTextColumn, TextBox 
from System.Windows.Data import Binding 

xaml = """ 
<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="panel1" 
     Title="harpia.ml" Height="600" Width="800" Background="#FFFBFBFB"> 
    <Grid Margin="0,0,0,58"> 
     <DataGrid x:Name="dataGrid" IsReadOnly="True" Background="#FFAC5C5C" AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="206" Width="449"> 
      <DataGrid.Columns> 

      </DataGrid.Columns> 
      </DataGrid> 
     <Button x:Name="refreshBtn" Content="Button" HorizontalAlignment="Left" Margin="10,221,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="384,221,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.033,-0.086"/> 
     <Button x:Name="button2" Content="Button" HorizontalAlignment="Left" Height="21" Margin="10,266,0,-36" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="button3" Content="Button" HorizontalAlignment="Left" Height="21" Margin="384,266,0,-36" VerticalAlignment="Top" Width="75"/> 
     <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="21" Margin="117,266,0,-36" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="236"/> 
    </Grid> 
</Window> 
""" 

class Student(object): 

    def __init__(self, name, branch, year): 
      self.name = name 
      self.branch = branch 
      self.year = year 
      print("A student object is created.") 

    def print_details(self): 
     """ 
     Prints the details of the student. 
     """ 
     print("Name:", self.name) 
     print("Branch:", self.branch) 
     print("Year:", self.year) 

def _button2_Click(s, e): 
    textBox1 = LogicalTreeHelper.FindLogicalNode(win, 'textBox1') 
    grid = LogicalTreeHelper.FindLogicalNode(win, 'dataGrid') 

    col1 = DataGridTextColumn() 
    col2 = DataGridTextColumn() 
    col3 = DataGridTextColumn() 

    grid.Columns.Add(col1) 
    grid.Columns.Add(col2) 
    grid.Columns.Add(col3) 

    col1.Binding = Binding("name") 
    col2.Binding = Binding("branch") 
    col3.Binding = Binding("year") 


    col1.Header = "name" 
    col2.Header = "branch" 
    col3.Header = "year" 

    item = [] 

    item.append(Student("Andre", "Piratas", "1973")) 
    item.append(Student("Andres", "Piratass", "1973s")) 
    item.append(Student("Andre3", "Piratas3", "19733")) 
    item.append(Student("Andre4", "Piratas4", "19734")) 
    grid.ItemsSource = item 
    textBox1.Text = str(grid.Items[0]) 

if __name__ == "__main__": 
    xr = XmlReader.Create(StringReader(xaml)) 
    win = XamlReader.Load(xr) 
    _button2 = LogicalTreeHelper.FindLogicalNode(win, 'button2') 
    _button2.Click += _button2_Click 
    Application().Run(win) 

Мне удалось добавить столбцы. Однако код не может добавлять элементы (строки) в DataGrid. Кто-нибудь знает, как я могу это сделать?

ответ

1

Должен быть привязкой, попробуйте добавить столбцы после определения их привязок.

col1.Binding = Binding("name") 
col2.Binding = Binding("branch") 
col3.Binding = Binding("year") 

col1.Header = "name" 
col2.Header = "branch" 
col3.Header = "year" 

grid.Columns.Add(col1) 
grid.Columns.Add(col2) 
grid.Columns.Add(col3) 
+0

Спасибо, но это не сработало. – Castilla

+0

Это дает вам некоторую ошибку? – Poncianux

Смежные вопросы