Benutzer mit den meisten Antworten
DataGridView

Frage
-
Hi,
in einem DataGridView zeige ich in einer Spalte Verzeichnispfade an.
im Moment werden die Pfade in dieser Form angezeigt:
Drive:\Folder\Folder\Folder\...
Im Tooltip erscheint dann der komplette von mir gespeicherte Pfad.
Ich möchte jetzt den Pfad anders kürzen (...\Folder\folder) und anzeigen.
Eine Routine zur Pfadkürzung habe ich bereits, aber wie und wo muss ich jetzt den gekürzten Pfad speichern, damit er wie gewünscht angezeigt wird, ohne das die Information des vollständigen Pfades verloren geht.
Danke für Tipps
Gruß
Werner
Antworten
-
Hallo Werner,
- Wenn ich dann aber e.Value zuweise, ist natürlich mein vollständiger Pfad weg.
nein, der ist nicht weg, der steht immernoch im Value der Zelle selber, deswegen gibt es ja ein CellFormatting-Ereignis.
void Dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if ((e.ColumnIndex == dgv.Columns["DirectoryName"].Index) && e.Value != null) { DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex]; e.Value = "neu"; object wertIstNichtWeg = cell.Value; // ;-) cell.ToolTipText = DeineTooltipPfadAnpassung(cell.Value as string); // oder wie gewünscht eben. } }
ciao Frank- Als Antwort markiert Werner Perplies Dienstag, 26. April 2011 06:55
Alle Antworten
-
Hallo Werner,ein Beispiel:
using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windows.Forms;
// [Gewusst wie: Hinzufügen von QuickInfos zu einzelnen Zellen in einem DataGridView-Steuerelement in Windows Forms]
// http://msdn.microsoft.com/de-de/library/2249cf0a.aspxnamespace WinDgvTooltip { public partial class Form1 : Form { DataGridView dgv = new DataGridView(); public Form1() { InitializeComponent(); this.Load += new EventHandler(Form1_Load); Controls.Add(dgv); Width = 700; dgv.Dock = DockStyle.Fill; dgv.CellFormatting += Dgv_CellFormatting; } void Dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if ((e.ColumnIndex == dgv.Columns["DirectoryName"].Index) && e.Value != null) { DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex]; cell.ToolTipText = DeineTooltipPfadAnpassung(e.Value as string); } } private string DeineTooltipPfadAnpassung(string verzeichnis) { FileInfo fi = new FileInfo(verzeichnis); string subDir = Directory.GetParent(fi.FullName).Name; return Path.Combine("...", subDir, fi.Name); } private void Form1_Load(object sender, EventArgs e) { List<FileInfo> dateien = new List<FileInfo>{ // Demo-Daten new FileInfo(typeof(Form).Assembly.Location), new FileInfo(typeof(File).Assembly.Location), new FileInfo(typeof(Point).Assembly.Location)}; dgv.DataSource = dateien; dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; } } }
ciao Frank -
Hallo Frank,
danke für Deinen Beitrag.
Vielleicht habe ich mich missverständlich ausgedrückt, aber das, was Du mir vorschlägst, ist nicht dass was ich möchte.
Also versuche ich es noch einmal zu erklären:
Wert meiner Zelle ist z. B.:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
angezeigt wird:
IST
In der Zelle:
als Wert:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
angezeigt:
C:\Users\Werner Perpli...
Als Tooltip:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VPSOLL
In der Zelle:
als Wert:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
angezeigt:
...ien\Kunde\VP
Als Tooltip:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VPDein, von mir angepasster Vorschlag:
private void dgvPublicationList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (e.Value != null && e.ColumnIndex == dgv.Columns["Verzeichnis"].Index)
{
DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex];
// cell.ToolTipText = DeineTooltipPfadAnpassung(e.Value as string);
cell.ToolTipText = GetShortPath(dgv, e);
}
}liefert:
In der Zelle:
als Wert:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
angezeigt:
C:\Users\Werner Perpli...
Als Tooltip:
...ien\Kunde\VPalles klar?
Gruß
Werner
-
Hallo Werner, Setzen von dem, was im Zellen-ToolTip angezeigt werden soll so:
cell.ToolTipText = [DeinToolTip];
e.Value = "dein gewünschter Text";
cell.ToolTipText = e.Value as string; e.Value = DeineTooltipPfadAnpassung(e.Value as string);
ciao Frank -
Hallo Frank,
so habe ich das ja auch gesehen, aber schau Dir doch noch mal dies an:
IST
In der Zelle:
als Wert:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
angezeigt:
C:\Users\Werner Perpli...
Als Tooltip:
C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VPdas ist doch ganz offensichtlich anders, oder?
angezeigt:
C:\Users\Werner Perpli...e.value ist aber: C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
Wo wird also C:\Users\Werner Perpli... zugewiesen und gespeichert?
Gruß
Werner
-
Hallo Werner,
-
angezeigt: C:\Users\Werner Perpli...
e.value ist aber: C:\Users\Werner Perplies\Documents\!Venturadateien\Kunde\VP
Also der Inhalt von Zellen kann natürlich nur soweit dargestellt werden, wie die Zelle breit ist.
In meinem Beispiel habe ich ja ein:
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
damit auf jeden Fall die volle Breite dargestellt wird - ggf. mit einer dementsprechend angepassten Breite ds Grids.
Normal zeichnet das DataGridView die Auslassungszeichen intern über den TextRenderer mit TextFormatFlags.EndEllipsis (Entfernt das Ende von abgeschnittenen Zeilen und ersetzt diese durch ein Auslassungszeichen).
Also etwa:
private void button1_Click(object sender, EventArgs e) { TextFormatFlags flags = TextFormatFlags.Bottom | TextFormatFlags.EndEllipsis; TextRenderer.DrawText(CreateGraphics(), "Dies ist ein Text der am Ende mit ... abgeschnitten wird.", Font, new Rectangle(10, 10, 100, 50), SystemColors.ControlText, flags); }
Deinen Quellcode kenne ich ja nicht.
ciao Frank
-
-
Hallo Frank,
Also der Inhalt von Zellen kann natürlich nur soweit dargestellt werden, wie die Zelle breit ist.
In meinem Beispiel habe ich ja ein:
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
damit auf jeden Fall die volle Breite dargestellt wird - ggf. mit einer dementsprechend angepassten Breite ds Grids.
Das ist alles klar.
Die Darstellung soll dem verfügbaren Platz entsprechen, der Inhalt soll erhalten bleiben.
Normal zeichnet das DataGridView die Auslassungszeichen intern über den TextRenderer mit TextFormatFlags.EndEllipsis (Entfernt das Ende von abgeschnittenen Zeilen und ersetzt diese durch ein Auslassungszeichen).
Ja, und diesen Vorgang würde ich gerne durch mein Verfahren ersetzen.
Um die richtige Länge meines Strings zu ermitteln verwende ich die Größe und den Font der angezeigten Spalte.
Wenn ich dann aber e.Value zuweise, ist natürlich mein vollständiger Pfad weg.
Ich muss wohl für die spätere Verwendung noch einmal den kompletten Pfad in einer separaten Liste verwalten.
Danke für Deine Beiträge.
Gruß
Werner
-
Hallo Werner,
- Wenn ich dann aber e.Value zuweise, ist natürlich mein vollständiger Pfad weg.
nein, der ist nicht weg, der steht immernoch im Value der Zelle selber, deswegen gibt es ja ein CellFormatting-Ereignis.
void Dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if ((e.ColumnIndex == dgv.Columns["DirectoryName"].Index) && e.Value != null) { DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex]; e.Value = "neu"; object wertIstNichtWeg = cell.Value; // ;-) cell.ToolTipText = DeineTooltipPfadAnpassung(cell.Value as string); // oder wie gewünscht eben. } }
ciao Frank- Als Antwort markiert Werner Perplies Dienstag, 26. April 2011 06:55