2009-02-09 23 views
8

Kullanıcı bir dosyayı üzerine sürüklediğinde/sürüklediğinde CSV verileriyle doldurulan bir veri ızgaram var. Boş ızgarada bir mesajın görüntülenmesi mümkün mü? "Lütfen buraya bir dosya sürükleyin" veya "Bu ızgara şu anda boş". Kılavuz şu anda sütunları ayarlamak için sürüklenene kadar beklediğim gibi koyu gri bir kutu olarak görüntülenir.Boş bir datagrid'e mesaj görüntülenmesi mümkün mü

cevap

8

DataGridView denetimini alt sınıflara ayırdık ve bunu ekledik. Sürükleme/bırakma işlevselliğine ihtiyacımız olmadı - sadece sorgularından hiçbir veri gelmediğinde kullanıcıya söylememiz gerekiyordu.

Biz emptyText özelliği böyle ilan ettiler:

private string cvstrEmptyText = ""; 
    [Category("Custom")] 
    [Description("Displays a message in the DataGridView when no records are displayed in it.")] 
    [DefaultValue(typeof(string), "")] 
    public string EmptyText 
    { 
     get 
     { 
      return this.cvstrEmptyText; 
     } 
     set 
     { 
      this.cvstrEmptyText = value; 
     } 
    } 

ve PaintBackground işlevini aşırı:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds) 
    { 
     RectangleF ef; 
     base.PaintBackground(graphics, clipBounds, gridBounds); 
     if ((this.Enabled && (this.RowCount == 0)) && (this.EmptyText.Length > 0)) 
     { 
      string emptyText = this.EmptyText; 
      ef = new RectangleF(4f, (float)(this.ColumnHeadersHeight + 4), (float)(this.Width - 8), (float)((this.Height - this.ColumnHeadersHeight) - 8)); 
      graphics.DrawString(emptyText, this.Font, Brushes.LightGray, ef); 
     } 
    } 
+0

'u araştırmam gerekecek Bu ekstra bir mantık olmadan güzel ve yeniden kullanılabilir, ben boşaltıcıyı tasarımcısında ayarlayabilirim –

1

Burada yapmanın en kolay şey, "Sürükle" ve "Sürükle" yapmak için dev bir etiket denetimi yapmaktır. etiketin sürükleme/bırakma olayını işlemek. Sürükle/bırak tamamlandığında, etiketi gizleyin ve ızgarayı gösterin.

+0

Bu tekniği eski, güzel ve temiz ve basit bir şekilde ListViews ile kullandım! –

1

Izgara görünümü kullanıyorsanız, EmptyDataText özelliğini kullanabilirsiniz. Bir datagrid'in ve (IMHO) çoğu durumda çalışmanın daha kolay olduğunu düşündüğüm her şeyi yapabilir

+0

Bu bir çözüm olabilir ancak Winforms ASP kullanmıyorum. Bu –

0

Ne bu durumda ne forma bir sekme denetimi ekleyin, koymak Bir sekmede DGV ve başka bir sekmede bir etiket ('Sürükle' veya benzer bir şey). Sekmeleri gizle. Daha sonra DGV boşsa, etiketi etiketli olarak gösterin. Sadece routeNpingme'ın cevabı gibi sürükleme/bırakma olayını burada gerçekleştirirsiniz, DGV'yi arka plana yükler ve sonra yükleme bittiğinde sekmeleri değiştirirsiniz. Bu güzel, çünkü VS Designer'da sekmeler arasında kolayca ileri ve geri geçiş yapabilme yeteneğine de sahipsiniz.