从任务填充时,C# DataGridView 不显示滚动条

C# DataGridView doesn't show Scrollbars when filling from Task

我目前遇到以下问题: 我有一个 DataGridView,它在后台由 Task 运行 填充。任务完成后,滚动条和单元格无法以某种方式在 DataGridView 中正确显示...将对话框调整为全屏模式(最大化)后,滚动条会正确显示...每当以另一种方式调整大小时(最小化),滚动条再次失败......这里有什么想法吗?我可以从任务中触发任何刷新事件来重新调整滚动条和单元格吗?

**其他信息:** DataGridView 被打包到一个带有 Dock = Fill 的 TableLayoutPanel 上。

编辑: 数据加载是通过

完成的
private void TryLoadData()  
{
    try
    {
        LoadData();
    }
    catch (Exception ex)
    {
        //Just some error logging
        _log.Error(ex);
        _errorHandler.Show(ex);
    }
}

private void LoadData()
{
    ClearRows();
    //Loading from database
    var data = _databaseAdapter.Get<Data, bool>(x => !x.Deleted);
    foreach (var singleDatum in data)
        LoadDataRowToDataGridView (singleDatum);
}

private void ClearRows()
{
    this.UiThreadInvoke(() => { DataGridView.Rows.Clear(); });
}

private void LoadDataRowToDataGridView(Data singleDatum)
{
    this.UiThreadInvoke(() => { DataGridView.Rows.Add(singleDatum.Id, singleDatum.Name); });
}

开始于:

new Task(TryLoadData).Start();

UiThreadInvoke:

using System;
using System.Windows.Forms;

namespace UIExtensions
{
    public static class UiThreadInvokeExtension
    {
        public static void UiThread(this Control control, Action code)
        {
            if (control.InvokeRequired)
            {
                control.BeginInvoke(code);
                return;
            }
            code.Invoke();
        }

        public static void UiThreadInvoke(this Control control, Action code)
        {
            if (control.InvokeRequired)
            {
                control.Invoke(code);
                return;
            }
            code.Invoke();
        }
    }
}

当您调整屏幕大小时,应用会重新绘制并呈现 window。尝试在加载数据时强制渲染网格。

datagridview1.update(); datagridview1.refresh();

试试这些

1.设置这些属性

ContactsDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
ContactsDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;

2。像这样插入

ContactsDataGridView.Invoke(new Action(() =>
{
    ContactsDataGridView.Rows.Add(kvp.Key, kvp.Value, new DataGridViewButtonCell(), new DataGridViewButtonCell());
}));