#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 еще один, а затем….
это работает, не знаю почему.