2010-08-08 4 views

risposta

0

Hai provato a legare un tooltip (condizionale) alla cella?

Impostare i dati di tooltip in ItemDataBound (o dinamico <% vincolante #)

+0

La cella mostrerà che è disponibile un suggerimento? – CJ7

+0

No, non lo sarà, tuttavia puoi farlo anche aggiungendo un CssClass alla cella. CssClass = "has-tooltip". Quindi usa la tua creatività e aggiungi un'icona "i" per indicare che ci sono altre informazioni. – Marko

+0

@Marko: questo non è fondamentalmente uno smart tag? – CJ7

1

si può sempre avere un StatusStrip e utilizzando i CellMouseEnter e CellMouseLeave eventi impostati e rimuovere (rispettivamente) la spiegazione dalla striscia di stato.

private void dgvCellMouseEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     statusStrip1.Text = (sender as DataGridView)[e.ColumnIndex, e.RowIndex].ToolTipText; 
    } 

    private void dgvCellMouseLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     statusStrip1.Text = ""; 
    } 

Come caratteristica aggiuntiva, si può dimostrare che la cellula ha informazioni "extra", mostrando un piccolo segno, come fa Excel. Ecco un piccolo frammento di codice che uso per fare la stessa identica cosa:

private void dgvCellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
    { 
     if (e.ColumnIndex != -1) && (e.RowIndex != -1) 
     { 
      DataGridViewCell dgvCell = (sender as DataGridView)[e.ColumnIndex, e.RowIndex]; 

      Pen greenPen = new Pen(Color.Green, 2); 
      Boolean hasTooltip = !dgvCell.ToolTipText.Equals(""); 
      Boolean hasCompleted = (dgvCell.Tag as CellInfo).complete; // CellInfo is a custom class 

      if (hasTooltip) && (hasCompleted) 
      { 
       e.Handled = true; 
       e.Paint(e.ClipBounds, e.PaintParts); 
       e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left + 5, e.CellBounds.Top + 2, e.CellBounds.Width - 12, e.CellBounds.Height - 6); 
       e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3); 
      } 
      else if (hasTooltip) 
      { 
       e.Handled = true; 
       e.Paint(e.ClipBounds, e.PaintParts); 
       e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2); 
      } 
      else if (hasCompleted) 
      { 
       e.Handled = true; 
       e.Paint(e.ClipBounds, e.PaintParts); 
       e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3); 
      } 
     } 
    } 

Questo codice disegna un bordo blu intorno alla cella se hasTooltip è vero, un bordo verde se hasCompleted è vero, ed entrambi i bordi (con quello verde dentro) se entrambi sono vere.

+0

Dove viene visualizzato StatusStrip? – CJ7

+0

È possibile scegliere dove posizionarlo, tuttavia, gli StatusStrip sono in genere ancorati nella parte inferiore del modulo. – Jesse

-1

Hai provato il ASP.NET AJAX PopupControl? Puoi spuntare su qualsiasi controllo e il popup è facile come posizionare i controlli all'interno di un pannello come le etichette.

0

Provare a utilizzare RowDetails; è possibile specificare RowDetailsTemplate per visualizzare informazioni dettagliate sulla riga. È possibile visualizzare un esempio di Dettagli riga here.

Problemi correlati