Laden...

ToolTip in einem DataGriedView, Zuweisung dauert zu lange

Erstellt von Killerregenwurm vor 12 Jahren Letzter Beitrag vor 12 Jahren 926 Views
K
Killerregenwurm Themenstarter:in
22 Beiträge seit 2009
vor 12 Jahren
ToolTip in einem DataGriedView, Zuweisung dauert zu lange

Hallo Com,

ich habe ein DataGridView, welches Einträge aus einer Datenbank anzeigen soll. Dabei stellt eine Row die Informationen von einem "Eintrag" in mehreren Spalten dar.
Da nicht alle Informationen in den einzelnen Zellen angezeigt werden können, soll ein ToolTip mit allen Inforamtionen erscheinen, wenn die Maus auf einer Row ist.

folgenden Code habe ich am Beispiel von Wie lege ich in einem DataGridView Tooltips fest, die von Zelle zu Zelle variieren? angefertigt.


             foreach (DataGridViewRow Zeile in dataGridViewVeranstaltungen.Rows)
            {
                if (Zeile.Cells[11].Value != null)
                {
                    Veranstaltung_alleinfos Event = (Veranstaltung_alleinfos)Zeile.Cells[11].Value;
                    Zeile.Cells[1].ToolTipText = Event.asTextList;
                    Zeile.Cells[2].ToolTipText = Event.Veranstalter.showTextAsList;
                    for (int i = 3; i < Zeile.Cells.Count; i++)
                    {
                        Zeile.Cells[i].ToolTipText = Event.asTextList;
                    }
                }
            }

Hierbei braucht der Rechner allerdings ca 3 bis 4 Sekunden, um alle ToolTips einer Row zuzuweisen. Das ist mir definitiv zu lang.
Gibt es eine elegante Lösung meines Problems?

Selbst hatte ich vorher versucht, einen ToolTip für eine ganze Row einzurichten. Dies habe ich über das MouseHover Event versucht.


            DataGridView.HitTestInfo hit = dataGridViewVeranstaltungen.HitTest(x, y);
            if (hit.Type == DataGridViewHitTestType.Cell)
            {
                MouseRowindex = hit.RowIndex;
            }
            if (MouseRowindex >= 0)
            {
                toolTipRow.ToolTipTitle = (string)dataGridViewVeranstaltungen.Rows [MouseRowindex].Cells ["Veranstaltung"].Value;
                toolTipRow.SetToolTip(dataGridViewVeranstaltungen, ((Veranstaltung_alleinfos)dataGridViewVeranstaltungen.Rows [MouseRowindex].Cells["ListInfos"].Value).asTextList);
            }
            else
            {
                toolTipRow.Hide(dataGridViewVeranstaltungen);
            }

Doch dabei wird mir der ToolTip nur in der ersten Spalte angezeigt und sonst nicht. Weiß da jemand woran das liegt? Ich halte dies nämlich für die schnellere Variante, auch wenn ich dort den Veranstalter nicht seperat angezeigt bekomme.

Grüße
Killerregenwurm

R
158 Beiträge seit 2007
vor 12 Jahren

Probier's doch mal so:


private void  dataGridViewVeranstaltungen_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
		if (e.RowIndex < 0)
			return;

        DataGridViewRow Zeile = dataGridViewVeranstaltungen.Rows[e.RowIndex];

        if (Zeile.Cells[11].Value != null)
        {
           Veranstaltung_alleinfos Event = (Veranstaltung_alleinfos)Zeile.Cells[11].Value;
           Zeile.Cells[1].ToolTipText = Event.asTextList;
           Zeile.Cells[2].ToolTipText = Event.Veranstalter.showTextAsList;
                 
		if (e.ColumnIndex>2)
        {
            Zeile.Cells[e.ColumnIndex].ToolTipText = Event.asTextList;
        }
    }
}





5.299 Beiträge seit 2008
vor 12 Jahren

hmm. Bei mir kommt ein Tooltip automatisch, wennich mit der Maus über einer Zelle bin, die eiglich zu klein ist für ihren Inhalt.
Das nutze ich sogar aus, indem ich eine Spalte nur 8 pix breit mache, und statt der Daten ein Icon anzeige.
Die enthaltene Info dieser Spalte kriegt man dann per Tooltip.

Ansonsten ist IMO EinzelblattView angesagt, wenn die Spalten zu viel, und die Inhalte zu umfangreich werden.

Gugge DBEinzelblattView auf Movie-Tuts

Der frühe Apfel fängt den Wurm.