2011-09-07 11 views
8

Birden çok sütun içeren bir kılavuzum var ve kullanıcılar herhangi bir sütuna göre sıralayabilirler. Izgarayı bağlayan veriler, özel varlık koleksiyonudur. Ekranda bir baskı butonum var ve bu butona tıkladığınızda özel bir baskı yapmam gerekiyor. Baskı, verileri ızgarada görüntülenen sırayla aynı sırada göstermelidir (ek verilerle)Bir datagrid öğesinden sıralanmış itemssource nasıl alınır

Veri kaynağını sıralama etkinliğinde sıralamak yerine, doğrudan sıralanan veri kaynağını almanın bir yolu var mı?

Teşekkür Pankaj

cevap

5

Evet, var. WPF'de, her zaman bir CollectionView bağlıdır, asla koleksiyonun kendisi değildir. Bir koleksiyon görünümünü kendiniz belirtmezseniz, varsayılan bir tane kullanılır. Böyle bu varsayılan toplama görünümü erişebilirsiniz:

CollectionViewSource.GetDefaultView(yourCollectionOfCustomEntities); 

Bu uygulanan tüm sıralama ve filtreleme ile ızgara ile gösterildiği gibi toplama görünümüdür.

+1

ne anlamış (herhangi bir sütun gibi ve kullanıcı türlü veriyi) kaynak toplama asla değişmeyecek ve sadece CollectionView değişti olacaktır. Yazımın çalışması için veri toplama formuna (İhtiyaçlar Listesi) ihtiyacım var. Yani varsayılan koleksiyon görünümü yeterli olmaz. Koleksiyon ayrıca sıralanmış koleksiyonView göre de sıralamak için kolay bir yolu var mı? Hata ayıklama sırasında gözlemlediğim bir şey, CollectionView'ın sıralı koleksiyona sahip olan korumalı bir InternalList özelliğine sahip olmasıdır. Ama mülkün korunduğu için bunu alamıyorum. –

+0

Koleksiyon görünümü üzerinde numaralandırdığınızda, öğeler sıralı olarak döndürülmelidir ... lütfen –

+0

numaralı telefona danışınız. Evet Collecion görünümünü numaralandırıp sıralı koleksiyonları oluşturabiliyorum. –

2

Ayrıca DataGrid öğenizin Items özelliğini de numaralandırabilirsiniz. ItemsSource özelliğinden farklı olarak, Items özelliği, sıralama ve filtreleme de dahil olmak üzere ekranda neler olduğunu yansıtmaktadır. Örneğin,

foreach (var item in dataGrid.Items) 
{ 
    // do something 
} 
7

VeriGrid.Items'ini kullanmak zorundasınız, Öğeler kılavuzun geçerli görünümünü yansıtır. ve Cast ve kullanım sonrası yöntemi kullanarak dönüştürmek zorunda .ToList();

hayal bu Cevabınız dayanarak

List<MyClass> myListOfMyClass = new List<MyClass>(); 
myGrid.ItemSource = myListOfMyClass; 
List<MyClass> myListOfMyClassSortedByTheUser = myGrid.Items.Cast<MyClass>().ToList(); 
+3

Bunun kabul edilenlerden daha iyi bir cevap olduğunu düşünüyorum. –