DataGridView скрывает полосы прокрутки после заполнения с помощью async

#c# #asynchronous #datagridview #task

#c# #асинхронный #datagridview #задача

Вопрос:

В моей форме у меня есть 4 сетки данных, разделенных с помощью элемента управления tab.

Когда я пытаюсь заполнить его асинхронной задачей, полосы прокрутки исчезают.

вот мой код

         await Task.Run(() =>
        {
            PopulateHistoryAll(items);
            PopulateHistoryParkerIn(parkerIn);
            PopulateHistoryParkerOut(parkerOut);
            PopulateHistoryMonthlyIn(monthlyIn);
            PopulateHistoryMonthlyOut(monthlyOut);
        });
  

Я пытался использовать этот код

         this.Invoke((MethodInvoker)delegate
        {
            //DataGridview Refreshment
            dgParkerIn.Enabled = true;
            dgParkerIn.ScrollBars = ScrollBars.Both;
        });
  

но это не работает.

Пожалуйста, помогите мне, спасибо 🙂

Комментарии:

1. Необходимо просмотреть код методов заполнения *

2. Лично я бы хотел, чтобы эти методы заполнения * заполнили 5 таблиц данных, а затем назначили их каждому соответствующему datagridview. Источник данных как и когда (с помощью вызова, если вы делаете это как часть асинхронной работы) и оставьте свойство scrollbars в покое. Никогда datagridview не показывал свои полосы прокрутки по мере необходимости при использовании этого простого способа их заполнения

Ответ №1:

Вот мой код для заполнения таблиц. все они одинаковы

     private void PopulateHistoryAll(IEnumerable<HistoryModel> items)
    {
        dgHistoryAll.Rows.Clear();
        if (items.Count() > 0)
            dgHistoryAll.Rows.Add(items.Count());

        var row = 0;
        foreach (var item in items)
        {
            dgHistoryAll[dtlAllRow.Index, row].Value = row   1;
            dgHistoryAll[dtlAllTransitId.Index, row].Value = item.Id;
            dgHistoryAll[dtlAllTerminal.Index, row].Value = item.Terminal;
            dgHistoryAll[dtlAllORNo.Index, row].Value = item.ORNumber;
            dgHistoryAll[dtlAllPlateNo.Index, row].Value = item.PlateNo;
            dgHistoryAll[dtlAllTicketNo.Index, row].Value = item.TicketNumber;
            dgHistoryAll[dtlAllDateTimeIn.Index, row].Value = item.TimeIn;
            dgHistoryAll[dtlAllDateTimeOut.Index, row].Value = item.TimeOut;
            dgHistoryAll[dtlAllDurationOfStay.Index, row].Value = item.Duration;
            dgHistoryAll[dtlAllRatesName.Index, row].Value = item.RateName;
            dgHistoryAll[dtlAllCoupon.Index, row].Value = item.Coupon;
            dgHistoryAll[dtlAllMonthlyRFID.Index, row].Value = item.MonthlyRFID;
            dgHistoryAll[dtlAllMonthlyName.Index, row].Value = item.MonthlyName;
            row  ;
        }
        this.Invoke((MethodInvoker)delegate
        {
            dgHistoryAll.ScrollBars = ScrollBars.Both; 
        });
    }
  

Ответ №2:

Я, наконец, нашел решение.

Хотя это странно…

Я попытался удалить datagrid и добавить create еще один, а затем….

это работает, не знаю почему.