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:
Tek tek veya nesneler için hücre stili özelliklerini DataGridViewCell DataGridViewRow ayarlamayın. Bu özellik tarafından belirtilen satır nesnesini RowTemplate içerir. Satır şablonundan kopyalanan her yeni satır, şablonun hücre stili nesnesinin kendi kopyasını alır. Maksimum ölçeklenebilirlik için hücre stili özelliklerini düzeyinde DataGridView ayarlayın. Örneğin özelliği yerine DataGridView.DefaultCellStyle özelliğini DataGridViewCell.Style ayarlayın.
Bazı hücreler için varsayılan biçimlendirme dışında biçimlendirme gerekirse hücre, satır veya sütun DataGridViewCellStyle grupları arasında aynı örneği kullanın. Tek tek hücrelerde, DataGridViewCellStyle satırlarda ve sütunlarda türün özelliklerini doğrudan ayarlamayın. Hücre stili paylaşımı örneği için bkz. Nasıl kullanılır: Formlar DataGridView Denetimiiçin Windows Hücre Stillerini Ayarlama. Ayrıca olay işleyicisini işleyiciyi işleyiciyi kullanarak hücre stillerini ayrı ayrı ayarlarken de bir performans cezasını CellFormatting önleyebilirsiniz. Bir örnek için, bkz. How to: Customize Data Formatting in the Windows Forms DataGridView Control.
Hücrenin stilini belirlerken özelliği DataGridViewCell.InheritedStyle yerine özelliğini DataGridViewCell.Style kullanın. özelliği Style henüz kullanılmamışsa DataGridViewCellStyle özelliğine erişmek sınıfının yeni bir örneğini oluşturur. Ayrıca, satır, sütun veya denetimden bazı stiller devralınmışsa, bu nesne hücre için tam stil bilgilerini içereyemebilirsiniz. Hücre stili devralma hakkında daha fazla bilgi için, Windows Forms DataGridView Denetimi'nin Hücre Stilleri'ne bakı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:
Büyük satır kümesine sahip bir DataGridView denetimde otomatik boyutlandırmayı kullanmaktan kaçının. Otomatik boyutlandırma kullanıyorsanız, yalnızca görüntülenen satırlara göre yeniden boyutlandırabilirsiniz. Yalnızca sanal modda görüntülenen satırları da kullanın.
Satırlar ve sütunlar için ,
DisplayedCellsDisplayedCellsExceptHeadersve numaralarının veya alanını DataGridViewAutoSizeRowsMode DataGridViewAutoSizeColumnsMode DataGridViewAutoSizeColumnMode kullanın.Satır üst bilgileri için, AutoSizeToDisplayedHeaders AutoSizeToFirstHeader numaralamanın DataGridViewRowHeadersWidthSizeMode veya alanını kullanın.
Maksimum ölçeklenebilirlik için otomatik boyutlandırmayı kapatın ve program aracılığıyla yeniden boyutlandırmayı 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:
Koleksiyonun içeriğine erişmeden önce içindeki tüm hücrelerin seçilip seçilmemiş olduğunu DataGridView SelectedCells belirlemek için yönteminin dönüş değerini kontrol AreAllCellsSelected edin. Ancak bu yöntemin satırların paylaşılmadan paylaşılmaya neden olduğunu unutmayın. Daha fazla bilgi için sonraki bölüme bakın.
Seçili hücre Count sayısını belirlemek için özelliğini System.Windows.Forms.DataGridViewSelectedCellCollection kullanmaktan kaçının. Bunun yerine yöntemini DataGridView.GetCellCount kullanın ve değerini DataGridViewElementStates.Selected iletir. Benzer şekilde, seçilen satır ve sütun koleksiyonları yerine DataGridViewRowCollection.GetRowCount seçili öğelerin sayısını belirlemek için ve yöntemlerini DataGridViewColumnCollection.GetColumnCount kullanın.
Hücre tabanlı seçim modlarından kaçının. Bunun yerine özelliğini DataGridView.SelectionMode veya olarak DataGridViewSelectionMode.FullRowSelect DataGridViewSelectionMode.FullColumnSelect ayarlayı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:
Satır, seçili sütunda yer alan tek bir seçili hücre içerir.
Satır, veya özellikleri ayarlanmış bir ToolTipText hücre ContextMenuStrip içerir.
Satır, özellik DataGridViewComboBoxCell kümesine sahip bir Items içerir.
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 AddInsert(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:
yönteminin
Add()veyaAdd(Int32)aşırı yüklemelerini Add veyaInsert(Int32,Int32)koleksiyonun yönteminin Insert aşırı yüklemesi çağrılırken. DataGridView.RowsÖzelliğinin değerini DataGridView.RowCount artırıyorken.
Özelliği DataGridView.DataSource ayarlarken.
parametresi tarafından belirtilen satırın koleksiyonun , , ve yöntemleri çağrılırken
indexSourceAddCopy 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 AddRangeInsert(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,
falsesütununda karşılık gelen özellik olarak ayarlandığında olarak ayarlamayıntrue. 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.
- DataGridView
- Windows Forms DataGridView Denetiminde Performans Ayarlaması
- Windows Forms DataGridView Denetiminde Sanal Mod
- Windows Forms DataGridView Denetiminde Veri Görüntüleme Modları
- Windows Forms DataGridView Denetimindeki Hücre Stilleri
- Nasıl yapılır: Windows Forms DataGridView Denetimi İçin Varsayılan Hücre Stillerini Ayarlama
- Windows Forms DataGridView Denetimindeki Boyutlandırma Seçenekleri