gpt4 book ai didi

C# DataGridView,大单元格 : Content never fully visible, 滚动跳过单元格

转载 作者:太空狗 更新时间:2023-10-29 21:59:44 27 4
gpt4 key购买 nike

DataGridView 控件(Windows.Forms、.NET Framework 3.0)中存在一个比 DataGridView 本身大的 DataGridViewCell 时,我遇到了一个相当棘手的问题.当大单元格滚动到 View 中时,它会正常显示,在底部被截断,因为它比 View 大。如果您进一步向下滚动,它最终会“捕捉”到顶部并停留在那里,直到您达到某个阈值。然后,下一行将显示在顶部,“大”行消失。

因此,您永远无法完全看到大单元格的内容。

这是一个示例代码:

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

知道如何解决这个问题吗?

最佳答案

我会截断任何超出特定大小的单元格内容(用省略号表示截断)并允许单击该单元格以显示一个弹出窗口,其中的全部内容在可滚动窗口中可见。或者我会在自定义 UserControl 中呈现这些可能较大的单元格的内容,如果文本超过一定长度,该自定义 UserControl 本身包含滚动条。

您遇到的问题是由 DataGridView 以非预期方式使用引起的,因此没有简单的内置方法来处理此问题我并不感到惊讶。

更新:对于查看日志,ReportViewer 可能是更合适的控件。以下是有关使用它的一些链接:

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/

关于C# DataGridView,大单元格 : Content never fully visible, 滚动跳过单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com