2015-12-02 6 views
0

Возможно, уже поздно, и я слишком долго смотрел на свой экран, но это действительно меня озадачило. У меня был datagrid, отображающий данные, но после того, как я присоединился к двум таблицам и попытался отобразить данные. Данные есть, потому что я могу по-прежнему получать событие двойного щелчка мыши для работы, но ни один текст не отображается ни в одном из столбцов или строк.WPF Datagrid имеет данные в строках, но не отображает текст

Это XAML.

<DataGrid Grid.Column="1" Grid.Row="1" Name="ProjectsSubGrid" ItemsSource="{Binding}" 
      AutoGenerateColumns="False" IsReadOnly="True" 
      MouseDoubleClick="ProjectsSubGrid_MouseDoubleClick" 
      Initialized="ProjectsSubGrid_Initialized"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=ProjectName}" Header="Project Name"/> 
     <DataGridTextColumn Binding="{Binding Path=AllottedHours}" Header="Allotted Hours"/> 
     <DataGridTextColumn Binding="{Binding Path=InvoicedHours}" Header="Invoiced Hours"/> 
     <DataGridTextColumn Binding="{Binding Path=UninvoicedHours}" Header="Uninvoiced Hours"/> 
     <DataGridTextColumn Binding="{Binding Path=RemainingHours}" Header="Remaining Hours"/> 
    </DataGrid.Columns> 
</DataGrid> 

и это мой код на C#, который устанавливает DataContext.

private void ProjectsSubGrid_Initialized(object sender, EventArgs e) 
{ 
    var list = from p in ProjectManagement.Context.Project 
       join a in ProjectManagement.Context.Account 
       on p.AccountId equals a.AccountId 
       select new ProjectView(){ 
        AccountId = a.AccountId, 
        ProjectId = p.ProjectId, 
        ProjectName = p.ProjectName, 
        InvoicedHours = p.InvoicedHours, 
        AccountName = a.CompanyName, 
        AllottedHours = p.AllottedHours, 
        RemainingHours = p.RemainingHours, 
        UninvoicedHours = p.UninvoicedHours 
       }; 
    ProjectsSubGrid.DataContext = list; 
} 

Это работает, когда я использую код ниже, но как только я переключаюсь на объединенные таблицы, он ломается.

ProjectsSubGrid.DataContext = ProjectManagement.Context.Project.Where(p=>true); 

Любая помощь была бы принята с благодарностью.

+0

Не используйте Initilized событие, лучше сделать это в конструкторе Window, а затем проверить. – AnjumSKhan

ответ

2

Спасибо всем за помощь. Наверное, это был просто я слишком долго смотрел на экран прошлой ночью. Я не размещал код для класса ProjectView, и именно там была проблема.

Я написал

public class ProjectView 
{ 
    public int ProjectId; 
    public string ProjectName; 
    public int AccountId; 
    public string AccountName; 
    public int AllottedHours; 
    public int InvoicedHours; 
    public int UninvoicedHours; 
    public int RemainingHours; 
} 

Я установил ее, изменив это

public class ProjectView 
{ 
    public int ProjectId { get; set; }  
    public string ProjectName { get; set; } 
    public int AccountId { get; set; } 
    public string AccountName { get; set; } 
    public int AllottedHours{ get; set; } 
    public int InvoicedHours { get; set; } 
    public int UninvoicedHours { get; set; } 
    public int RemainingHours { get; set; } 
} 
0

1) Вы должны установить только DataContextDataGrid в методе LoadGrid.

this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => 
{ 
    ProjectsSubGrid.DataContext = list; 
})); 

2) Это не имеет смысла, чтобы установить имя свойства DataGridTextColumn. 3) Обновление вы Linq запрос в

var list = (from p in ProjectManagement.Context.Project 
       join a in ProjectManagement.Context.Account 
       on p.AccountId equals a.AccountId 
       select new ProjectView(){ 
        AccountId = a.AccountId, 
        ProjectId = p.ProjectId, 
        ProjectName = p.ProjectName, 
        InvoicedHours = p.InvoicedHours, 
        AccountName = a.CompanyName, 
        AllottedHours = p.AllottedHours, 
        RemainingHours = p.RemainingHours, 
        UninvoicedHours = p.UninvoicedHours 
       }).ToList(); 
+0

Я попробовал обновление и updatelayout, а также вызов его при инициализации страницы, но ни одна из них не работала. Я даже удалил свойство Name DataGridTextColumn и считаю, что это или нет, что тоже не работает. –

+0

имеют прокомментированную строку 'ProjectsSubGrid.ItemsSource = list' из' LoadGrid' метода. – user1672994

+0

Обновлен мой ответ за 1-й балл. Не добавляйте строку, указанную в пункте 2. – user1672994

0

Попробуйте добавить путь к вашему обязывающего заявления DataGridTextColumn. Вот пример из предыдущего моего проекта.

<DataGrid Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
              ItemsSource="{Binding Addresses}" 
              AutoGenerateColumns="False" 
              CanUserAddRows="False" 
              IsReadOnly="True" 
              SelectionMode="Single" 
              IsEnabled="{Binding IsSelectionEnabled}" 
              SelectedItem="{Binding SelectedAddress}" 
              SelectedIndex="{Binding SelectedIndex}" 
              > 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path=Street}" Header="Street"/> 
      <DataGridTextColumn Binding="{Binding Path=Number}" Header="Number"/> 
      <DataGridTextColumn Binding="{Binding Path=PostalCode}" Header="PostalCode"/> 
      <DataGridTextColumn Binding="{Binding Path=City}" Header="City"/> 
      <DataGridTextColumn Binding="{Binding Path=Provence}" Header="Provence"/> 
      <DataGridTextColumn Binding="{Binding Path=Country}" Header="Country"/> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

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

+0

Я предполагаю, что с вами должно быть что-то неправильно связать DataContext и Itemsource. Попробуйте ItemsSource = "{Список привязок}", а затем попробуйте удалить ProjectsSubGrid.DataContext = list; Кажется странным, что вы оба связываете источник items и dataContext для сетки. (отредактируйте: нажатие введите способ быстрого). – ImP

+0

Забыл упомянуть, что мой пример использует MVVM, я полагаю, вы делаете это в коде позади. [здесь] (http://stackoverflow.com/questions/15761124/wpf-datagrid-binding-does-not-show-values) вы можете найти что-то похожее на вашу проблему. – ImP