Ho riscontrato un problema piuttosto sgradevole con il controllo DataGridView
(Windows.Forms, .NET Framework 3.0) quando c'è uno DataGridViewCell
più grande di DataGridView stesso . Quando la cella grande viene scorsa nella visualizzazione, viene visualizzata normalmente, tagliata in basso poiché è più grande della vista. Se si scorre verso il basso, alla fine si "scatta" in alto e rimane lì, fino a raggiungere una certa soglia. Quindi, la riga successiva verrà visualizzata in alto e la riga "grande" scomparirà.C# DataGridView, celle grandi: contenuto mai completamente visibile, scorrimento salta cella
A causa di questo non si è mai in grado di vedere pienamente il contenuto della cella di grandi dimensioni.
Ecco un esempio di codice:
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
Qualsiasi idea di come risolvere questo problema?
ho bisogno di qualcosa di più sofisticato di uno scopi di registrazione di testo (per visualizzare l'output del registro, per l'esattezza) e pensato che il DataGridView (associato a un elenco di voci di registro) sarebbe una buona idea. Ho aggirato questo problema di scorrimento ora suddividendo i messaggi in diverse righe in anticipo. Non esattamente quello che voglio perché questo introduce altri problemi, ma ... okay. Grazie! – sunside
@ Markus: fai tutto il tuo log in latino? :) – MusiGenesis
@Markus: vi consiglio di chiedere il vostro problema come un altro domanda qui su SO, e vedere quello che la gente suggeriscono. Qualcosa come "qual è il miglior controllo per la visualizzazione (potenzialmente molto lunga) degli elementi di log in una winforms app?" Non riesco davvero a pensare ad una buona risposta, me stesso. Probabilmente finirò per scrivere un controllo personalizzato completo per questo, ma è potenzialmente molto lavoro. – MusiGenesis