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:
Tek tek DataGridViewCell veya DataGridViewRow nesneler için hücre stili özelliklerini ayarlamaktan kaçının. Bu özellik tarafından RowTemplate belirtilen satır nesnesini içerir. Satır şablonundan kopyalanan her yeni satır, şablonun hücre stili nesnesinin kendi kopyasını alır. En yüksek ölçeklenebilirlik için hücre stili özelliklerini DataGridView düzeyinde ayarlayın. Örneğin, özelliği yerine DataGridViewCell.Style özelliğini ayarlayınDataGridView.DefaultCellStyle.
Bazı hücreler varsayılan biçimlendirme dışında bir biçimlendirme gerektiriyorsa, hücre, satır veya sütun grupları arasında aynı DataGridViewCellStyle örneği kullanın. Tek tek hücrelerde, satırlarda ve sütunlarda türün DataGridViewCellStyle özelliklerini doğrudan ayarlamaktan kaçının. Hücre stili paylaşımı örneği için bkz . Nasıl yapılır: Windows Forms DataGridView Denetimi için Varsayılan Hücre Stillerini Ayarlama. Ayrıca, olay işleyicisini işleyerek hücre stillerini ayrı ayrı ayarlarken performans cezasından CellFormatting kaçınabilirsiniz. Bir örnek için bkz . Nasıl yapılır: Windows Forms DataGridView Denetiminde Veri Biçimlendirmesini Özelleştirme.
Hücrenin stilini belirlerken özelliği yerine DataGridViewCell.Style özelliğini kullanınDataGridViewCell.InheritedStyle. Style özelliği henüz kullanılmadıysa özelliğine erişmek sınıfının yeni bir örneğini DataGridViewCellStyle oluşturur. Ayrıca, bazı stiller satır, sütun veya denetimden devralındıysa, bu nesne hücrenin tam stil bilgilerini içermeyebilir. Hücre stili devralma hakkında daha fazla bilgi için bkz . Windows Forms DataGridView Denetimindeki Hücre Stilleri.
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:
Çok sayıda satır içeren bir DataGridView denetimde otomatik boyutlandırma kullanmaktan kaçının. Otomatik boyutlandırma kullanıyorsanız, yalnızca görüntülenen satırlara göre yeniden boyutlandırın. Yalnızca sanal modda görüntülenen satırları da kullanın.
Satırlar ve sütunlar için , ve DataGridViewAutoSizeColumnMode numaralandırmalarının DataGridViewAutoSizeRowsModeveya
DisplayedCellsExceptHeaders
alanını kullanınDisplayedCells
DataGridViewAutoSizeColumnsMode.Satır üst bilgileri için numaralandırmanın AutoSizeToDisplayedHeadersDataGridViewRowHeadersWidthSizeMode veya AutoSizeToFirstHeader alanını kullanın.
En yüksek ölçeklenebilirlik için otomatik boyutlandırmayı kapatın ve programlı yeniden boyutlandırmayı 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:
Koleksiyonun içeriğine SelectedCells erişmeden önce içindeki DataGridView tüm hücrelerin seçilip seçilmediğini belirlemek için yönteminin AreAllCellsSelected dönüş değerini denetleyin. Ancak, bu yöntemin satırların paylaşılmamasına neden olabileceğini unutmayın. Daha fazla bilgi edinmek için sonraki bölüme bakın.
Seçili hücrelerin sayısını belirlemek için özelliğini System.Windows.Forms.DataGridViewSelectedCellCollection kullanmaktan Count kaçının. Bunun yerine yöntemini kullanın DataGridView.GetCellCount ve değerini geçirin DataGridViewElementStates.Selected . Benzer şekilde, seçili satır ve sütun koleksiyonlarına erişmek yerine seçili öğelerin sayısını belirlemek için ve DataGridViewColumnCollection.GetColumnCount yöntemlerini kullanınDataGridViewRowCollection.GetRowCount.
Hücre tabanlı seçim modlarından kaçının. Bunun yerine özelliğini veya DataGridViewSelectionMode.FullColumnSelectolarak DataGridViewSelectionMode.FullRowSelect ayarlayınDataGridView.SelectionMode.
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:
Satır, seçili sütunda olmayan tek bir seçili hücreyi içerir.
Satır, veya ContextMenuStrip özellikleri ayarlanmış bir hücre ToolTipText içerir.
Satır, özellik kümesine sahip Items bir DataGridViewComboBoxCell içerir.
İ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 koleksiyonunInsert(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:
yönteminin
Add()
veyaAdd(Int32)
aşırı yüklemelerini Add veyaInsert(Int32,Int32)
koleksiyonun yönteminin Insert aşırı yüklenmesini DataGridView.Rows çağırırken.Özelliğin DataGridView.RowCount değerini artırırken.
Özelliği ayarlanırken DataGridView.DataSource .
parametre tarafından belirtilen satırın koleksiyonun
indexSource
AddCopy, , 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ırkenAdd(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 ReadOnly
false
veya Selected özelliğini, sütunundaki ilgili özellik olarak ayarlandığında olaraktrue
ayarlamayı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.
- 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
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin