Ich habe ein ziemlich unangenehmes Problem mit dem Steuerelement DataGridView
(Windows.Forms, .NET Framework 3.0) festgestellt, wenn es eine DataGridViewCell
ist, die größer als das DataGridView selbst ist . Wenn die große Zelle in die Ansicht gerollt wird, wird sie normal angezeigt, abgeschnitten an der Unterseite, da sie größer als die Ansicht ist. Wenn Sie weiter nach unten scrollen, "schnappt" es schließlich oben und bleibt dort, bis Sie eine bestimmte Schwelle erreichen. Dann wird die nächste Reihe oben angezeigt und die "große" Reihe verschwindet.C# DataGridView, große Zellen: Inhalt nie vollständig sichtbar, scrollt überspringt Zelle
Aus diesem Grund sind Sie nie in der Lage, den Inhalt der großen Zelle vollständig 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?
Ich brauche etwas anspruchsvoller als eine Textbox Protokollierung (zum Anzeigen der Protokollausgabe, um genau zu sein) und dachte, die DataGridView (an eine Liste von Protokollelementen gebunden) wäre eine gute Idee. Ich habe dieses Scroll-Problem jetzt umgangen, indem ich die Nachrichten zuvor in mehrere Zeilen aufgeteilt habe. Nicht genau was ich will, weil das andere Probleme bringt, aber ... okay. Danke! – sunside
@Markus: Sie tun alle Ihre Anmeldung in Latein? :) – MusiGenesis
@Markus: Ich empfehle, Ihr Problem als eine andere Frage hier auf SO, und sehen, was die Leute vorschlagen. Etwas wie "Was ist die beste Kontrolle für die Anzeige von (möglicherweise sehr langen) Log-Elementen in einer Winforms-App?" Ich kann mir selbst keine gute Antwort vorstellen. Ich würde wahrscheinlich am Ende ein komplettes benutzerdefiniertes Steuerelement dafür schreiben, aber das ist möglicherweise eine Menge Arbeit. – MusiGenesis