Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#DataGridView,大单元格:内容永远不完全可见,滚动跳过单元格_C#_.net_Winforms_Datagridview_Scrollbar - Fatal编程技术网

C#DataGridView,大单元格:内容永远不完全可见,滚动跳过单元格

C#DataGridView,大单元格:内容永远不完全可见,滚动跳过单元格,c#,.net,winforms,datagridview,scrollbar,C#,.net,Winforms,Datagridview,Scrollbar,我在DataGridView控件(Windows.Forms、.netframework3.0)中遇到了一个相当严重的问题,因为DataGridViewCell大于DataGridView本身。当大单元格滚动到视图中时,它会正常显示,在底部被截断,因为它比视图大。如果你进一步向下滚动,它最终会在顶部“捕捉”并停留在那里,直到你达到某个阈值。然后,下一行将显示在顶部,“大”行消失 因此,您永远无法完全看到大单元格的内容 下面是一个示例代码: using System; using System.W

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

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

下面是一个示例代码:

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
使用系统;
使用System.Windows;
命名空间日志文本框{
公共类TestForm:Form
{
公共测试表单()
{
Text=“DataGridView大单元格示例”;
立根(0,0,300,200,指定边界。宽度|指定边界。高度);
DataGridView DataGridView=新建DataGridView();
dataGridView.Dock=DockStyle.Fill;
dataGridView.ScrollBars=滚动条。两者都是;
dataGridView.AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.AllCellsCeptheaders;
添加(dataGridView);
DataGridViewColumn=新DataGridViewTextBoxColumn();
column.AutoSizeMode=DataGridViewAutoSizeColumnMode.Fill;
column.CellTemplate.Style.WrapMode=DataGridViewTriState.True;
dataGridView.Columns.Add(column);
//正常行
DataGridViewRow行=新建DataGridViewRow();
DataGridViewCell单元格=(DataGridViewTextBoxCell)列.CellTemplate.Clone();
cell.Value=“Foo”;
行.单元格.添加(单元格);
dataGridView.Rows.AddRange(行);
//多行行
行=新的DataGridViewRow();
cell=(DataGridViewTextBoxCell)column.CellTemplate.Clone();
单元格值=
“Lorem ipsum dolor sit amet,Consettur sadipscing Eliter,”+Environment.NewLine+
“在劳动和福利方面暂时不受限制,”+Environment.NewLine+
“ipsum dolor sit amet,Conseteteur sadipscing Eliter,sed diam nonumy,”+Environment.NewLine+
“埃尔莫临时劳工和劳工局局长,环境部,”+Environment.NewLine+
“sed diam voluptua.在vero eos et accusam et justo duo dolores et,”+Environment.NewLine+
“ea rebum.Stet clita kasd gubergren,无海takimata sanctus est,”+Environment.NewLine+
“Lorem ipsum dolor sit amet.magna aliquyam erat,sed diam voluptua.,”+Environment.NewLine+
“在vero eos和accusam和justo duo dolores和ea rebum.Stet clita,”+Environment.NewLine+
“卡斯德·古伯格伦(kasd gubergren),没有海洋——塔基马塔圣所(takimata sanctus)是一个知识渊博的地方;
行.单元格.添加(单元格);
dataGridView.Rows.AddRange(行);
//正常行
行=新的DataGridViewRow();
cell=(DataGridViewTextBoxCell)column.CellTemplate.Clone();
cell.Value=“Bar”;
行.单元格.添加(单元格);
dataGridView.Rows.AddRange(行);
}
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
运行(新的TestForm());
}
}
}//名称空间

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

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

您遇到了一个问题,这是由于DataGridView被意外地使用而导致的,因此没有简单的、内置的方法来处理这一问题并不奇怪

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


我需要比文本框更复杂的东西来记录日志(准确地说是显示日志输出),我认为DataGridView(绑定到日志项列表)是个好主意。我现在绕过了这个滚动问题,事先将消息分成几行。不完全是我想要的,因为这会带来其他问题,但是。。。可以谢谢@马库斯:你所有的日志都是用拉丁语写的吗?:)@马库斯:我建议把你的问题作为另一个问题来问,看看人们的建议。类似于“在winforms应用程序中显示(可能很长)日志项的最佳控件是什么?”我自己真的想不出一个好的答案。我可能最终会为此编写一个完整的自定义控件,但这可能需要大量的工作。@MusiGenesis只有在有时,如果我的同事不注意的话。:)我将看一看ReportViewer,但它对我来说似乎不是“最佳”解决方案。(问题是,我正在查看网络中不同节目的状态输出,这些节目将在“直播”中播出。)问另一个问题可能是个好主意。(只是每个人似乎都在回答“列表框”,这并不是我所需要的:)@Markus:确保你在你的问题中写上“我不能用列表框来做这个”。