Windows Forms DataGridView Denetimini Ölçeklendirme için En İyi Yöntemler

Denetim DataGridView , maksimum ölçeklenebilirlik sağlayacak şekilde tasarlanmıştır. Büyük miktarda veri görüntülemeniz gerekiyorsa, büyük miktarda bellek kullanmaktan veya kullanıcı arabiriminin (UI) yanıt hızını düşürmekten kaçınmak için bu konuda açıklanan yönergeleri izlemeniz gerekir. Bu konuda aşağıdaki sorunlar ele alınmaktadır:

  • Hücre stillerini verimli bir şekilde kullanma

  • Kısayol menülerini verimli bir şekilde kullanma

  • Otomatik yeniden boyutlandırmayı verimli bir şekilde kullanma

  • Seçili hücreleri, satırları ve sütun koleksiyonlarını verimli bir şekilde kullanma

  • Paylaşılan satırları kullanma

  • Satırların paylaşılmamasını önleme

Özel performans gereksinimleriniz varsa sanal mod uygulayabilir ve kendi veri yönetimi işlemlerinizi sağlayabilirsiniz. Daha fazla bilgi için bkz . Windows Forms DataGridView Denetimindeki Veri Görüntüleme Modları.

Hücre Stillerini Verimli Kullanma

Her hücre, satır ve sütunun kendi stil bilgileri olabilir. Stil bilgileri nesnelerde DataGridViewCellStyle depolanır. Birçok tek öğe DataGridView için hücre stili nesneleri oluşturmak, özellikle büyük miktarda veriyle çalışırken verimsiz olabilir. Performans etkisini önlemek için aşağıdaki yönergeleri kullanın:

Kısayol Menülerini Verimli Kullanma

Her hücre, satır ve sütunun kendi kısayol menüsü olabilir. Denetimdeki DataGridView kısayol menüleri denetimlerle gösterilir ContextMenuStrip . Hücre stili nesnelerinde olduğu gibi, birçok öğe DataGridView için kısayol menüleri oluşturmak da performansı olumsuz etkiler. Bu cezayı önlemek için aşağıdaki yönergeleri kullanın:

  • Tek tek hücreler ve satırlar için kısayol menüleri oluşturmaktan kaçının. Bu, denetime yeni satırlar eklendiğinde kısayol menüsüyle birlikte kopyalanan satır şablonunu içerir. En yüksek ölçeklenebilirlik için, denetimin ContextMenuStrip tamamı için tek bir kısayol menüsü belirtmek üzere yalnızca denetimin özelliğini kullanın.

  • Birden çok satır veya hücre için birden çok kısayol menüsüne ihtiyacınız varsa veya RowContextMenuStripNeeded olaylarını CellContextMenuStripNeeded işleyebilirsiniz. Bu olaylar, kısayol menüsü nesnelerini kendiniz yönetmenize olanak tanıyarak performansı ayarlamanıza olanak sağlar.

Otomatik Yeniden Boyutlandırmayı Verimli Kullanma

Hücre içeriği değiştikçe satırlar, sütunlar ve üst bilgiler otomatik olarak yeniden boyutlandırılabilir, böylece hücrelerin tüm içeriği kırpma olmadan görüntülenir. Boyutlandırma modlarını değiştirmek satırları, sütunları ve üst bilgileri de yeniden boyutlandırabilir. Doğru boyutu belirlemek için, denetimin DataGridView barındırması gereken her hücrenin değerini incelemesi gerekir. Büyük veri kümeleriyle çalışırken, otomatik yeniden boyutlandırma gerçekleştiğinde bu analiz denetimin performansını olumsuz etkileyebilir. Performans cezalarını önlemek için aşağıdaki yönergeleri kullanın:

Daha fazla bilgi için bkz . Windows Forms DataGridView Denetimindeki Boyutlandırma Seçenekleri.

Seçili Hücreler, Satırlar ve Sütunlar Koleksiyonlarını Verimli Bir Şekilde Kullanma

Koleksiyon SelectedCells , büyük seçimlerle verimli bir şekilde çalışmaz. SelectedRows Ve SelectedColumns koleksiyonları da verimsiz olabilir, ancak normal DataGridView denetimdeki hücrelerden çok daha az satır ve satırlardan çok daha az sütun olduğundan daha az sayıda satır vardır. Bu koleksiyonlarla çalışırken performans cezalarını önlemek için aşağıdaki yönergeleri kullanın:

Paylaşılan Satırları Kullanma

Denetimde DataGridView paylaşılan satırlar aracılığıyla verimli bellek kullanımı elde edilir. Satırlar, sınıfının örneklerini DataGridViewRow paylaşarak görünüşleri ve davranışları hakkında mümkün olduğunca çok bilgi paylaşır.

Satır örneklerinin paylaşılması bellekten tasarruf sağlarken, satırlar kolayca paylaşılmayan hale gelebilir. Örneğin, bir kullanıcı bir hücreyle doğrudan etkileşime her geldiğinde satırı paylaşılmaz hale gelir. Bundan kaçınılamayacağından, bu konudaki yönergeler yalnızca çok büyük miktarda veriyle çalışırken ve yalnızca program her çalıştırıldığında kullanıcıların verilerin nispeten küçük bir bölümüyle etkileşime geçeceği durumlarda yararlıdır.

Hücrelerinden herhangi biri değer içeriyorsa, bir satır ilişkisiz DataGridView denetimde paylaşılamaz. DataGridView Denetim bir dış veri kaynağına bağlı olduğunda veya sanal mod uyguladığınızda ve kendi veri kaynağınızı sağladığınızda, hücre değerleri hücre nesneleri yerine denetimin dışında depolanır ve satırların paylaşılması sağlanır.

Bir satır nesnesi yalnızca tüm hücrelerinin durumu satırın durumundan ve hücreleri içeren sütunların durumlarından belirlenebiliyorsa paylaşılabilir. Hücrenin durumunu, artık satır ve sütun durumundan çıkarılamayacak şekilde değiştirirseniz, satır paylaşılamaz.

Örneğin, aşağıdaki durumlardan herhangi birinde satır paylaşılamaz:

İlişkili modda veya sanal modda, ve olaylarını işleyerek CellToolTipTextNeeded tek tek hücreler için Araç İpuçları ve CellContextMenuStripNeeded kısayol menüleri sağlayabilirsiniz.

Denetimi, DataGridView öğesine her satır eklendiğinde DataGridViewRowCollectionotomatik olarak paylaşılan satırları kullanmayı dener. Satırların paylaşıldığından emin olmak için aşağıdaki yönergeleri kullanın:

  • yönteminin Add(Object[]) aşırı yüklenmesini Add ve koleksiyonun Insert(Object[]) yönteminin Insert aşırı yüklenmesini çağırmaktan DataGridView.Rows kaçının. Bu aşırı yüklemeler otomatik olarak paylaşılmayan satırlar oluşturur.

  • Özelliğinde belirtilen satırın DataGridView.RowTemplate aşağıdaki durumlarda paylaşılabildiğinden emin olun:

  • parametre tarafından belirtilen satırın koleksiyonun indexSourceAddCopy, , InsertCopyAddCopiesve InsertCopies yöntemleri çağrılırken paylaşılabildiğinden DataGridView.Rows emin olun.

  • Yönteminin aşırı yüklenmesi, yöntemi, yöntemin Insert(Int32,DataGridViewRow) aşırı yüklenmesi Insert ve koleksiyonun Add yöntemi çağrılırken Add(DataGridViewRow) belirtilen satır veya InsertRange satırların paylaşılabildiğinden DataGridView.Rows emin AddRange olun.

Bir satırın paylaşılıp paylaşılmadığını belirlemek için yöntemini kullanarak DataGridViewRowCollection.SharedRow satır nesnesini alın ve nesnenin Index özelliğini denetleyin. Paylaşılan satırlar her zaman –1 özellik değerine sahiptir Index .

Satırların Paylaşılmamasını Önleme

Kod veya kullanıcı eyleminin sonucu olarak paylaşılan satırlar paylaşılmayan hale gelebilir. Performansın etkilenmesini önlemek için satırların paylaşılmamasına neden olmak zorunda kalmamalısınız. Uygulama geliştirme sırasında, satırların RowUnshared ne zaman paylaşılmadığını belirlemek için olayı işleyebilirsiniz. Bu, satır paylaşımı sorunlarının hatalarını ayıklarken kullanışlıdır.

Satırların paylaşılmamasını önlemek için aşağıdaki yönergeleri kullanın:

  • Koleksiyonun dizinini Rows oluşturmaktan veya döngüyle foreach yinelemekten kaçının. Genellikle satırlara doğrudan erişmeniz gerekmez. DataGridView satırlarda çalışan yöntemler, satır örnekleri yerine satır dizini bağımsız değişkenlerini alır. Ayrıca, satırla ilgili olayların işleyicileri, satırların paylaşılmamasına neden olmadan satırları işlemek için kullanabileceğiniz satır özelliklerine sahip olay bağımsız değişken nesnelerini alır.

  • Bir satır nesnesine erişmeniz gerekiyorsa yöntemini kullanın DataGridViewRowCollection.SharedRow ve satırın gerçek dizinini geçirin. Ancak, bu yöntem aracılığıyla alınan paylaşılan satır nesnesinin değiştirilmesinin bu nesneyi paylaşan tüm satırları değiştireceğini unutmayın. Ancak, yeni kayıtların satırı diğer satırlarla paylaşılmaz, bu nedenle başka bir satırı değiştirdiğinizde bundan etkilenmez. Paylaşılan satırla temsil edilen farklı satırların farklı kısayol menüleri olabileceğini de unutmayın. Paylaşılan bir satır örneğinden doğru kısayol menüsünü almak için yöntemini kullanın GetContextMenuStrip ve satırın gerçek dizinini geçirin. Bunun yerine paylaşılan satırın ContextMenuStrip özelliğine erişirseniz, -1 paylaşılan satır dizinini kullanır ve doğru kısayol menüsünü almaz.

  • Koleksiyonun dizinini DataGridViewRow.Cells oluşturmaktan kaçının. Bir hücreye doğrudan erişmek, üst satırının paylaşılmamasına neden olur ve yeni DataGridViewRowbir örneği oluşturur. Hücreyle ilgili olayların işleyicileri, satırların paylaşılmamasına neden olmadan hücreleri işlemek için kullanabileceğiniz hücre özelliklerine sahip olay bağımsız değişken nesnelerini alır. Geçerli hücrenin CurrentCellAddress satır ve sütun dizinlerini doğrudan hücreye erişmeden almak için özelliğini de kullanabilirsiniz.

  • Hücre tabanlı seçim modlarından kaçının. Bu modlar satırların paylaşılmamasına neden olur. Bunun yerine özelliğini veya DataGridViewSelectionMode.FullColumnSelectolarak DataGridViewSelectionMode.FullRowSelect ayarlayınDataGridView.SelectionMode.

  • veya DataGridView.RowStateChanged olaylarını DataGridViewRowCollection.CollectionChanged işlemeyin. Bu olaylar satırların paylaşılmamasına neden olur. Ayrıca, bu olayları tetikleyen veya DataGridView.OnRowStateChanged yöntemlerini çağırmayınDataGridViewRowCollection.OnCollectionChanged.

  • Özellik değeri , , FullRowSelectColumnHeaderSelectveya RowHeaderSelectolduğunda DataGridView.SelectionModeFullColumnSelectkoleksiyona erişmeyinDataGridView.SelectedCells. Bu, tüm seçili satırların paylaşılmamalarına neden olur.

  • yöntemini çağırmayın DataGridView.AreAllCellsSelected . Bu yöntem satırların paylaşılmamasına neden olabilir.

  • Özellik değeri olduğunda DataGridView.SelectionModeCellSelectyöntemini çağırmayınDataGridView.SelectAll. Bu, tüm satırların paylaşılmayan hale gelmesine neden olur.

  • Bir hücrenin ReadOnlyfalse veya Selected özelliğini, sütunundaki ilgili özellik olarak ayarlandığında olarak trueayarlamayın. Bu, tüm satırların paylaşılmayan hale gelmesine neden olur.

  • özelliğine DataGridViewRowCollection.List erişmeyin. Bu, tüm satırların paylaşılmayan hale gelmesine neden olur.

  • yönteminin Sort(IComparer) aşırı yüklemesini çağırmayın Sort . Özel bir karşılaştırıcıyla sıralamak, tüm satırların paylaşılmamalarına neden olur.

Ayrıca bkz.