2009-07-10 2 views
1

Что мне нужно сделать, чтобы связать мой элемент управления DataGrid WPF с объектом DataTable?привязка данных к элементу управления DataGrid WPF к объекту System.Data.DataTable?

Я страдаю от этого в течение нескольких дней. Даже когда привязка и запрос работают правильно, и в таблице есть наблюдаемые данные - в сетке данных ничего не отображается.

Мой XAML код напоминает это:

<Window x:Class="DataGridTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:TK="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    Title="Window1" Height="300" Width="300"> 
     <Grid> 
      <TK:DataGrid ItemsSource="{Binding Path=DTUsers}" /> 
     </Grid> 
</Window> 

Мой C# кода напоминает это:
(DAO мой доступ к данным объекта)

public partial class Window1 : Window 
{ 
    public dao DAO = new dao (ConnectionString) ; 
    public System.Data.DataTable DTUsers { get; set; } 

    public Window1() 
    { 
     InitializeComponent(); 

     if (DAO != null) 
      DTUsers = DAO.Query(@"SELECT * FROM users"); 
      // Returns a DataTable object containing user records. 
      // I have confirmed that this returns my data correctly. 
    } 
} 

Я проверил выход, и ошибок привязки нет.
Зачем это компилировать и запускать, но не будет отображать какие-либо данные ???

(Если вы не знаете, где находится элемент управления DataGrid, доступен набор инструментов WPF here. Установите его, добавьте ссылку на WPFToolkit.dll [который появится в диалоговом окне «Добавить ссылку» в разделе «.NET "] и предоставить декларацию пространства имен XML [в моем XAML выше], чтобы использовать элемент управления DataGrid WPF.)

ответ

5

будет создавать вашу разметку, включая привязку. В этот момент DTUsers по-прежнему null, поэтому ничего не отображается. Затем вы меняете DTUsers, но для привязки (и, следовательно, сетки) нет способа узнать, что вы сделали это, и поэтому ничего не делает.

Вы должны либо сделать DTUsers свойство зависимости, либо реализовать INotifyPropertyChanged на свой класс, и поднять PropertyChanged событие после того, как вы измените стоимость объекта.

+0

Это имеет смысл! Благодаря тонну! – Giffyguy

+0

Хмм --- Я перевел InitializeComponent() в самую нижнюю часть конструктора, и теперь по крайней мере DataGrid может заполнить себя соответствующими столбцами и заголовками столбцов ... но он по-прежнему не показывает записи данных ... Любой другие идеи? Я попрошу вас снова проголосовать, если вы хотите дать еще один ответ. – Giffyguy

+0

О, я случайно оставил свой запрос закомментированным ... плохим. Он отлично работает сейчас, благодаря вашему ответу! – Giffyguy

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