2009-02-09 9 views
8

Tengo una cuadrícula de datos que se rellena con datos CSV cuando el usuario arrastra/suelta un archivo sobre ella. ¿Es posible mostrar un mensaje en la cuadrícula en blanco, por ejemplo, "Arrastre un archivo aquí" o "Esta cuadrícula está actualmente vacía". La grilla actualmente se muestra como un cuadro gris oscuro mientras espero hasta que el archivo se arrastre para configurar las columnas, etc.¿Es posible mostrar un mensaje en una cuadrícula de datos vacía?

Respuesta

8

Hemos subclasificado el control DataGridView y lo hemos agregado. No necesitábamos la funcionalidad de arrastrar/soltar; solo necesitábamos decirle al usuario cuando no se obtuvieron datos de su consulta.

tenemos una propiedad emptyText declarada como esto:

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; 
     } 
    } 

y sobrecargados la función PaintBackground:

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

Esto es bueno y reutilizable sin lógica adicional, puedo establecer el texto vacío en el diseñador –

1

Creo que lo más fácil de hacer aquí es hacer un control de etiqueta gigante para hacer "Arrastrar aquí" y manejar el evento de arrastrar/soltar de la etiqueta. Una vez que se completa la función de arrastrar/soltar, oculta la etiqueta y muestra la cuadrícula.

+0

¡He utilizado esta técnica con ListViews en el pasado, agradable, limpio y simple! –

1

si utiliza un gridview en su lugar, puede utilizar la propiedad EmptyDataText. Puede hacer todo lo que puede hacer una cuadrícula de datos y (en mi humilde opinión) creo que es más fácil trabajar en la mayoría de los casos

+0

Esto podría ser una solución pero estoy usando Winforms no ASP. Tendré que investigar esto –

0

Lo que hago en esta situación es agregar un control de pestañas a la forma, poner el DGV en una pestaña y una etiqueta ('Arrastrar aquí' o algo similar) en la otra pestaña. Ocultar las pestañas Luego, si el DGV está vacío, muestre la pestaña con la etiqueta. Al igual que la respuesta de routeNpingme, usted manejaría el evento de arrastrar/soltar aquí, cargaría el DGV en el fondo y luego cambiaría las pestañas cuando termine de cargarse. Esto es agradable, porque también tiene la capacidad de alternar fácilmente entre las pestañas mientras está en VS Designer.

Cuestiones relacionadas