【问题标题】:Horizontal Scroll Bar on DataGridViewDataGridView 上的水平滚动条
【发布时间】:2015-02-10 14:48:23
【问题描述】:

有没有办法让水平滚动条在设置为填充的列的 AutoSizeMode 时设置?

我有 2 列,我希望它们填充 DataGridView 的宽度。当行中内容的宽度超过DataGridView的宽度时,我想启用水平滚动条。不知道该怎么做。通过我所做的研究,我发现在 AutoSizeMode 中使用“AllCell”选项可以启用滚动条,但是,我希望行填充 DataGridView。

【问题讨论】:

    标签: c# .net datagridview


    【解决方案1】:

    您不能在本机上同时拥有这两种行为。
    您必须使用 DataGridViewColumn.MinimumWidth 属性对其进行编码。
    这是一个使用 DataGridViewCellValueChanged 事件的示例(但您肯定需要根据您的具体情况调整它):

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        foreach (DataGridViewColumn column in dataGridView1.Columns)
            column.MinimumWidth = column.Width;
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
    }
    

    请注意,如果您的数据网格中有很多行,这可能会非常耗时。

    【讨论】:

    • 我担心这是唯一的方法。我将不得不做一些测试,看看它有多慢。感谢您的回复。
    • DataGridViewAutoSizeColumnsMode.DisplayedCells 可以帮助你,如果它太慢,但你也必须覆盖 Scroll 事件。
    【解决方案2】:

    有一个简单的方法,虽然它显然不是理想的:

    • 在末尾添加一个 AutoSizeMode 设置为 Fill 的空列
    • 并将最后一列的 HeaderText 设置为空字符串(我显然在我的演示中忘记了...)

    这样它(几乎)看起来好像第二列的 AutoSizeMode 设置为 FIll。

    这里,Column1 和 Column2 的 AutoSizeMode 设置为 DisplayedCells,Column3 设置为 Fill:

    【讨论】:

      【解决方案3】:

      这是一个非常老的帖子,但我想我会添加它。如果您不介意将 AutoSizeMode 设置为 Fill。

      将问题列的 AutoSizeMode 设置为 AllCells。

      这将调整列标题的大小并强制它离开可见区域,从而显示水平滚动条。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 2015-03-06
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        相关资源
        最近更新 更多