2013-04-04 2 views
1

Использование C# .NET4.5, MS Visual Studio 2012, WPF.wpf datagrid Ienumerable return null

Привет, ребята, здесь есть код, который дает мне нуль. Этот код был предыдущим решением, которое я пробовал. Я не получил никаких ошибок, но никогда не тестировал их с сегодняшнего дня, когда обнаружил, что я отлаживал там строки, которые были пустыми.

Heres код:

первый я бросаю мои данные я собирал из SQL к DataTable и бросил его в мой DataGrid ...

private void LoadPareto(string pg) 
{ 
    DataTable tbl = new DataTable(); 
    tbl = mysqlq.SQL_GetPareto(pg); 
    paretogrid.ItemsSource = tbl.AsDataView(); 
    // InsertColumns(); 
    ShowArrows(); 
} 

2-й набор до привязки в XAML ...

<DataGrid Name ="paretogrid" ItemsSource="{Binding}" 

третий я создал IEnumerable ...

public IEnumerable<System.Windows.Controls.DataGridRow> GetDataGridRow(System.Windows.Controls.DataGrid grid) 
{ 
    var itemsource = grid.ItemsSource as System.Collections.IEnumerable; 
    if (null == itemsource) yield return null; 
    foreach (var item in itemsource) 
    { 
     var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; // null? 
     if (null != row) yield return row; 
    } 
} 

Тогда я называю это в этом методе ...

private void ShowArrows() 
{ 
    var rows = GetDataGridRow(paretogrid); // fetching null? 

    foreach (DataGridRow r in rows) 
    { 
     DataRowView rv = (DataRowView)r.Item; 
     foreach (DataGridColumn column in paretogrid.Columns) 
     { 
      if (column.GetCellContent(r) is TextBlock) 
      { 
       TextBlock cellcontent = column.GetCellContent(r) as TextBlock; 
       MessageBox.Show(cellcontent.Text); 
      } 
     } 
    } 
} 

Теперь проблема у меня есть в Ienumerbale я вижу мой исходный пункт содержит 12007 записей, который является совершенным. Тем не менее, когда я пошагово я нахожу ...

var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 

возвращает нуль, который мой «если» заявление найти его как ложное, так скачет выход. Так что, конечно, когда я иду, чтобы пройти через цикл foreach в методе «showarrows». Это не беспокоит, так как есть нуль.

Итак, где я иду не так? я что-то упускаю?

Заранее спасибо, парни, девочки!

+0

не имеет никакого отношения к тому, что мой стол настроен на «asdataview»? – lemunk

+0

Вы устанавливаете 'ItemsSource' как в коде, так и в xaml. Не могли бы вы попытаться удалить обязательную часть? – Joulukuusi

+0

ahhhh Я вижу, да, я принял часть ответа за ответ и часть ответа XMAL. Я попытаюсь вытащить XAML, посмотрим, что произойдет – lemunk

ответ

2

Ваш DataGrid еще не обновлен, когда вы получаете строки. Решением будет paretogrid.UpdateLayout() сразу после установки ItemsSource.

Обратите внимание, что это не очень хорошо для смешивания данных и кода пользовательского интерфейса. То, что вы пытаетесь сделать, возможно, было сделано в XAML, и у вас не было бы этой проблемы.

+0

thats it! вот что тоже смутило меня отладкой тоже! Спасибо за это!. да. Все, что мне известно, это mvvm и никогда не контролирует доступ напрямую. Но, честно говоря, я понятия не имею, что такое mvvm, и все, что я когда-либо кодировал, это Winforms, так что пока я пытаюсь вписаться в WPF медленно, тогда, когда я привык к изменениям и xaml i может затем начать смотреть, как действительно использовать WPF mvvm – lemunk