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