Frage

Ich habe ein ziemlich unangenehmes Problem mit der DataGridView Steuerung (Windows.Forms, .NET Framework 3.0) auftreten, wenn es eine DataGridViewCell ist, die sich größer als die Datagridview ist. Wenn die große Zelle in Ansicht gescrollt wird es normalerweise zeigt, an der Unterseite abgeschnitten, da es größer als die Ansicht ist. Wenn Sie nach unten scrollen weiter es schließlich „Schnappschüsse“ an der Spitze und bleiben dort, bis Sie eine bestimmte Schwelle erreichen. Dann wird die nächste Zeile im oberen Bereich angezeigt werden, und die „große“ Zeile verschwindet.

Aufgrund der, dass Sie nie in der Lage sind, vollständig den Inhalt der großen Zelle zu sehen.

Hier ist ein Beispielcode:

using System;
using System.Windows;

namespace LoggerTextBox {
public class TestForm : Form
{
    public TestForm()
    {
        Text = "DataGridView Large Cell Example";
        SetBounds(0, 0, 300, 200, BoundsSpecified.Width | BoundsSpecified.Height);

        DataGridView dataGridView = new DataGridView();
        dataGridView.Dock = DockStyle.Fill;
        dataGridView.ScrollBars = ScrollBars.Both;
        dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        Controls.Add(dataGridView);

        DataGridViewColumn column = new DataGridViewTextBoxColumn();
        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        column.CellTemplate.Style.WrapMode = DataGridViewTriState.True;
        dataGridView.Columns.Add(column);

        // normal row
        DataGridViewRow row = new DataGridViewRow();
        DataGridViewCell cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
        cell.Value = "Foo";
        row.Cells.Add(cell);
        dataGridView.Rows.AddRange(row);

        // multiline row
        row = new DataGridViewRow();
        cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
        cell.Value =
            "Lorem ipsum dolor sit amet, consetetur sadipscing elitr," + Environment.NewLine +
            "sed diam nonumy eirmod tempor invidunt ut labore et doloreLorem," + Environment.NewLine +
            "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy," + Environment.NewLine +
            "eirmod tempor invidunt ut labore et dolore magna aliquyam erat,," + Environment.NewLine +
            "sed diam voluptua. At vero eos et accusam et justo duo dolores et," + Environment.NewLine +
            "ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est," + Environment.NewLine +
            "Lorem ipsum dolor sit amet. magna aliquyam erat, sed diam voluptua.," + Environment.NewLine +
            "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita," + Environment.NewLine +
            "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
        row.Cells.Add(cell);
        dataGridView.Rows.AddRange(row);

        // normal row
        row = new DataGridViewRow();
        cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
        cell.Value = "Bar";
        row.Cells.Add(cell);
        dataGridView.Rows.AddRange(row);
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TestForm());
    }
}
} // namespace

Jede Idee, wie dieses Problem beheben?

War es hilfreich?

Lösung

würde ich jede Zelle Inhalte jenseits einer bestimmten Größe (mit Ellipsen das Abschneiden, um anzuzeigen) gestutzt und ermöglichte der Zelle geklickt werden, um ein Pop-up-Fenster mit dem vollständigen Inhalt in einem scrollbaren Fenster sichtbar anzuzeigen. Oder ich würde den Inhalt dieser potenziell großen Zellen in einer benutzerdefinierten Usercontrol machen, dass selbst enthält Scrollbalken, wenn der Text über eine bestimmte Länge ist.

Sie laufen in ein Problem, das von der Datagridview führt zu einer ungewollten Art und Weise verwendet wird, so überrascht, dass ich bin nicht, dass es keine einfache, integrierte Möglichkeit, mit diesen umzugehen.

Aktualisieren : für Protokolle anzeigen, die ReportViewer möglicherweise eine geeignetere Steuerung sein. Hier sind einige Links über die Verwendung:

http://www.codeproject.com/KB/cs/reportdisplay.aspx

http: // www .microsoft.com / Downloads / details.aspx? FamilyID = f38f7037-b0d1-47a3-8063-66af555d13d9 & displaylang = en

http://www.devx.com/dotnet/Article/30424/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top