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

Denetim, DataGridView maksimum ölçeklenebilirlik sağlamak için tasarlanmıştır. Büyük miktarlarda veri görüntülemeye ihtiyacınız varsa, büyük miktarlarda bellek tüketmek veya kullanıcı arabiriminin (UI) yanıt hızını düşürmemek için bu konu başlığı altında açıklanan yönergeleri izlemelisiniz. Bu konu aşağıdaki sorunları ele atır:

  • Hücre stillerini verimli bir şekilde kullanma

  • Kısayol menülerini verimli kullanma

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

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

  • Paylaşılan satırları kullanma

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

Özel performans ihtiyaçlarını karşılarsanız sanal modu kullanabilir ve kendi veri yönetimi işlemlerinizi sebilirsiniz. Daha fazla bilgi için bkz. Forms DataGridView Windows Veri Görüntüleme Modları.

Hücre Stillerini Verimli Kullanma

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

Kısayol Menülerini Verimli Kullanma

Her hücrenin, satırın ve sütunun kendi kısayol menüsü olabilir. Denetimde kısayol DataGridView menüleri denetimler ile ContextMenuStrip temsil eder. Hücre stili nesnelerde olduğu gibi, tek tek birçok öğe için kısayol DataGridView menüleri oluşturmak performansı olumsuz yönde 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 ekleniyorsa kısayol menüsüyle birlikte kopyalanan satır şablonunu içerir. Maksimum ölçeklenebilirlik için, denetimin tamamı için tek bir kısayol menüsü ContextMenuStrip 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 ihtiyaç ediyorsanız veya CellContextMenuStripNeeded olaylarını RowContextMenuStripNeeded işebilirsiniz. Bu olaylar kısayol menüsü nesnelerini kendiniz yönetmenize olanak sağlayarak performansı ayarlamanıza olanak sağlar.

Otomatik Yeniden Boyutlandırmayı Verimli Kullanma

Hücre içeriği değiştiklerinde satırlar, sütunlar ve üst bilgiler otomatik olarak yeniden boyutlandırılabilir ve böylece hücre içeriğinin tamamı kırpma olmadan görüntülenebilir. Boyutlandırma modlarının değiştirilmesi satırları, sütunları ve üst bilgileri de yeniden boyutlandırabilir. Doğru boyutu belirlemek için DataGridView denetimin, uygun olması gereken her hücrenin değerini incelemesi gerekir. Büyük veri kümeleriyle çalışırken, bu analiz otomatik yeniden boyutlandırma oluştuğunda denetimin performansını olumsuz etkileyebilir. Performans cezalarından kaçınmak için aşağıdaki yönergeleri kullanın:

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

Seçili Hücreler, Satırlar ve Sütun Koleksiyonlarını Verimli Kullanma

Koleksiyon, SelectedCells büyük seçimlerle verimli bir şekilde işlem gerçekleştirmez. Tipik bir denetimde hücrelerden çok daha az satır ve satırlardan çok daha az sütun olduğundan ve koleksiyonları da verimsiz SelectedRows SelectedColumns DataGridView olabilir. Bu koleksiyonlarla çalışırken performans cezalarından kaçınmak için aşağıdaki yönergeleri kullanın:

Paylaşılan Satırları Kullanma

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

Satır örneklerinin paylaşılmış olması bellek tasarrufu sağlarken, satırlar kolayca paylaşılmaz hale gelebiliyor. Örneğin, bir kullanıcı bir hücreyle doğrudan etkileşim kurduğunda satırı paylaşılmaz hale gelir. Bu kaçınılamayacak bir durum olduğundan, bu konu başlığında yer alan yönergeler yalnızca çok büyük miktarlarda verilerle çalışırken ve yalnızca kullanıcıların program her çalıştırıldıklarında verilerin nispeten küçük bir bölümüyle etkileşime geçerek etkileşim kurduğunda yararlıdır.

Hücrelerden herhangi biri değer içeriyorsa DataGridView satır, sınırsız denetimde paylaşılamaz. Denetim bir dış veri kaynağına bağlı olduğunda veya sanal modu uygulayarak kendi veri kaynağınızı sağlarken hücre değerleri hücre nesneleri yerine denetimin dışında depolanır ve satırların paylaşılmasına DataGridView izin verir.

Satır nesnesi yalnızca tüm hücrelerinin durumu satırın durumuna ve hücreleri içeren sütunların durumlarına göre belirlene ise paylaşılır. Bir hücrenin durumunu, artık satırın ve sütundaki durumdan silinmeyecek şekilde değiştirirsanız, satır paylaşılamaz.

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

Bağlı modda veya sanal modda, ve olaylarını işerek tek tek hücreler için ToolTips ve kısayol CellToolTipTextNeeded menüleri CellContextMenuStripNeeded sebilirsiniz.

Denetim, DataGridView satırına her ekleniyorsa otomatik olarak paylaşılan satırları kullanmaya DataGridViewRowCollection çalışır. Satırların paylaştırıldıklarından emin olmak için aşağıdaki yönergeleri kullanın:

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

  • özelliğinde belirtilen satırın aşağıdaki DataGridView.RowTemplate durumlarda paylaşılaa olduğundan emin olun:

  • parametresi tarafından belirtilen satırın koleksiyonun , , ve yöntemleri çağrılırken indexSource AddCopy AddCopies InsertCopy InsertCopies paylaşılalana emin DataGridView.Rows olun.

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

Bir satırın paylaşıp paylaşılma olmadığını belirlemek için yöntemini kullanarak satır nesnesini alın ve DataGridViewRowCollection.SharedRow nesnenin özelliğini Index kontrol edin. Paylaşılan satırlar her zaman Index –1 özellik değerine sahip olur.

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

Paylaşılan satırlar, kod veya kullanıcı eyleminin sonucu olarak paylaşılamaz hale geldi. Performans etkisini önlemek için satırların paylaşılmamasıyla ilgili sorunlardan kaçınmalısiniz. Uygulama geliştirme sırasında, satırların ne RowUnshared zaman paylaşımının kaldırılmış olduğunu belirlemek için olayı işebilirsiniz. Bu, satır paylaşımı sorunlarda hata ayıklarken yararlıdır.

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

  • Koleksiyonun dizinini oluşturmaktan kaçının Rows veya bir döngüyle arasında yineleme yapın foreach . 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ır ile ilgili olaylar için işleyiciler, satırları paylaşılmayan hale gelmesine neden olmadan satırları işlemek için kullanabileceğiniz satır özelliklerine sahip olay bağımsız değişkeni nesneleri alır.

  • Bir satır nesnesine erişmeniz gerekiyorsa, DataGridViewRowCollection.SharedRow yöntemini kullanın ve satırın gerçek dizinini geçirin. Ancak, bu yöntem aracılığıyla alınan bir paylaşılan satır nesnesini değiştirmenin, bu nesneyi paylaşan tüm satırları değiştirecek olduğunu unutmayın. Yeni kayıtlar için satır diğer satırlarla paylaşılmaz, bu nedenle başka bir satırı değiştirdiğinizde bu işlem etkilenmez. Ayrıca, paylaşılan bir satırla temsil edilen farklı satırlarda kısayol menülerinin farklı olabileceğini unutmayın. Paylaşılan bir satır örneğinden doğru kısayol menüsünü almak için GetContextMenuStrip yöntemini kullanın ve satırın gerçek dizinini geçirin. ContextMenuStripBunun yerine paylaşılan satırın özelliğine eriştiğinizde,-1 ' in paylaşılan satır dizinini kullanır ve doğru kısayol menüsünü almacaktır.

  • Koleksiyonun dizinlenmesini önleyin DataGridViewRow.Cells . Bir hücreye doğrudan erişmek, üst satırının paylaşılmayan hale gelmesine neden olur ve yeni bir örneği oluşturulur DataGridViewRow . Hücreyle ilişkili olaylara yönelik işleyiciler, satır özelliklerine sahip olay bağımsız değişkeni nesnelerini, satırların paylaşılmayan hale gelmesine neden olmadan hücreleri işlemek için kullanabileceğiniz hücre özellikleriyle alırlar. Bu CurrentCellAddress özelliği, hücreye doğrudan erişmeden geçerli hücrenin satır ve sütun dizinlerini almak için de kullanabilirsiniz.

  • Hücre tabanlı seçim modlarından kaçının. Bu modlar, satırların paylaşılmayan hale gelmesine neden olur. Bunun yerine, DataGridView.SelectionMode özelliğini veya olarak DataGridViewSelectionMode.FullRowSelect ayarlayın DataGridViewSelectionMode.FullColumnSelect .

  • DataGridViewRowCollection.CollectionChangedVeya DataGridView.RowStateChanged olaylarını işlemez. Bu olaylar, satırların paylaşılmayan hale gelmesine neden olur. Ayrıca, veya yöntemlerini çağırmayın DataGridViewRowCollection.OnCollectionChanged ve DataGridView.OnRowStateChanged Bu olayları yükseltir.

  • DataGridView.SelectedCellsÖzellik değeri,, veya olduğunda koleksiyona erişmeyin DataGridView.SelectionMode FullColumnSelect ColumnHeaderSelect FullRowSelect RowHeaderSelect . Bu, tüm seçili satırların paylaşılmayan hale gelmesine neden olur.

  • Yöntemini çağırmayın DataGridView.AreAllCellsSelected . Bu yöntem, satırların paylaşılmayan hale gelmesine neden olabilir.

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

  • ReadOnly Selected Bir hücrenin veya özelliğini, false sütununda karşılık gelen özellik olarak ayarlandığında olarak ayarlamayın true . Bu, tüm satırların paylaşılmayan hale gelmesine neden olur.

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

  • Sort(IComparer)Metodun aşırı yüklemesini çağırmayın Sort . Özel bir karşılaştırıcı ile sıralama tüm satırların paylaşılmayan hale gelmesine neden olur.

Ayrıca bkz.