Aslında bunu çözdüm ama gelecek nesillere gönderiyorum.
Çift monitör sistemimde DataGridView ile ilgili çok tuhaf bir sorunla karşılaştım. Sorun, kontrolün SON DERECE yavaş yeniden boyanması olarak kendini gösterir ( tam bir yeniden boyama için 30 saniye gibi ), ancak yalnızca ekranlarımdan birinde olduğunda. Diğer yandan, yeniden boyama hızı iyidir.
En son beta olmayan sürücülere sahip bir Nvidia 8800 GT'ye sahibim (175. bir şey). Bu bir sürücü hatası mı? Bu özel konfigürasyonla yaşamak zorunda olduğum için bunu havada bırakacağım. (Yine de ATI kartlarında olmuyor ...)
Boyama hızının hücre içeriğiyle hiçbir ilgisi yoktur ve özel çizim, yalnızca düz bir dikdörtgen boyarken bile performansı hiç iyileştirmez.
Daha sonra forma bir ElementHost yerleştirmenin (System.Windows.Forms.Integration ad alanından) sorunu düzelttiğini öğrendim. Onunla uğraşmak zorunda değilsiniz; DataGridView'ün de açık olduğu formun alt öğesi olması gerekir. Visible özelliği true olduğu sürece (0, 0) olarak yeniden boyutlandırılabilir .
.NET 3 / 3.5 bağımlılığını uygulamama açıkça eklemek istemiyorum; Bu denetimi çalışma zamanında (yapabiliyorsa) yansıma kullanarak oluşturmak için bir yöntem yapıyorum. Çalışır ve en azından gerekli kitaplığa sahip olmayan makinelerde sorunsuz bir şekilde başarısız olur - sadece yavaş olmaya geri döner.
Bu yöntem aynı zamanda uygulama çalışırken düzeltmek için başvurmama izin vererek formumda WPF kitaplıklarının neyi değiştirdiğini görmeyi kolaylaştırır (Spy ++ kullanarak).
Çok sayıda deneme yanılmadan sonra, denetimin kendisinde çift arabelleğe almayı etkinleştirmenin (yalnızca formun aksine) sorunu düzelttiğini fark ettim!
Bu nedenle, DoubleBuffering'i etkinleştirebilmeniz için DataGridView'e dayalı özel bir sınıf oluşturmanız yeterlidir. Bu kadar!
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
Tüm ızgara örneklerim bu özel sürümü kullandığı sürece, her şey yolunda. Bunun neden olduğu ve alt sınıf çözümünü kullanamadığım bir durumla karşılaşırsam (eğer koda sahip değilsem), sanırım bu denetimi forma enjekte etmeyi deneyebilirim :) ( 'I rağmen Bağımlılıktan bir kez daha kaçınmak için DoubleBuffered özelliğini dışarıdan zorlamak için yansıma kullanmayı deneme olasılığı daha yüksektir ).
Bu kadar önemsiz derecede basit bir şeyin zamanımın çoğunu tüketmesi üzücü ...