Как обновить таблицу данных, которая является источником данных datagridview в многопоточной среде ⇐ C#
-
Anonymous
Как обновить таблицу данных, которая является источником данных datagridview в многопоточной среде
У меня есть две формы с именами Form1 и Form2.
У меня есть таблица данных в форме 1 и представление сетки данных в форме 2.
У меня возникла проблема при обновлении его в форме Form1 с помощью функции Task.Factory.StartNew.
Когда я добавляю новую строку в таблицу данных, представление datagridview не будет обновляться, пока я не прокрутлю ее. и когда я очищаю всю таблицу данных и добавляю новую строку в таблицу данных, представление datagridview все еще не изменяется, и возникает ошибка при сортировке, щелкнув один из столбцов.
Во-первых, как правильно обновить таблицу данных, которая используется в datagridview в многопоточной среде. во-вторых, как обновить заполнение datagridview после обновления таблицы данных.
Форма1
с использованием System.ComponentModel; использование System.Data; использование System.Diagnostics; пространство имен dgvTest { публичный частичный класс Form1: Форма { // DataTable для торговых историй общедоступная статическая таблица данных? ТорговаяИсторияDT = ноль; общедоступная форма1() { ИнициализироватьКомпонент(); TradeHistoryDT = новый DataTable(); TradeHistoryDT.TableName = "TradeHistory"; TradeHistoryDT.Columns.Add("Время", typeof(DateTime)); TradeHistoryDT.Columns.Add("Сторона", typeof(string)); TradeHistoryDT.Columns.Add("Тикер", typeof(string)); TradeHistoryDT.Columns.Add("Цена", typeof(int)); TradeHistoryDT.Columns.Add("Количество", typeof(int)); } частная пустота button1_Click (отправитель объекта, EventArgs e) { Форма Form2 = новая Форма2(); форма.Показать(); } общественная недействительность add_rows_to_tt (int n) { List new_trades = GenerateRandomTrades(n); ListToDT (new_trades); } общественная недействительность Change_whole_data (int n) { ТорговаяИсторияDT.Очистить(); List new_trades = GenerateRandomTrades(n); ListToDT (new_trades); } public void ListToDT(List new_trades) { foreach (торговля в new_trades) { TradeHistoryDT.Rows.Add(t.ExecuteTime, t.Side, t.Ticker, t.Price, t.Quantity); } } общедоступный статический список GenerateRandomTrades(int NumberOfTrades) { Случайный случайный = новый случайный(); List trades = новый List(); for (int i = 0; i add_rows_to_tt(n)); } частная пустота button3_Click (отправитель объекта, EventArgs e) { int n = int.Parse(textBox1.Text); Task.Factory.StartNew(() =>change_whole_data(n)); } } } Форма2
с использованием системы; использование System.Collections.Generic; использование System.ComponentModel; использование System.Data; использование System.Drawing; используя System.Linq; использование System.Text; использование System.Threading.Tasks; использование System.Windows.Forms; пространство имен dgvTest { публичный частичный класс Form2: Форма { публичная форма2() { ИнициализироватьКомпонент(); dataGridView1.DataSource = Form1.TradeHistoryDT; } } }
У меня есть две формы с именами Form1 и Form2.
У меня есть таблица данных в форме 1 и представление сетки данных в форме 2.
У меня возникла проблема при обновлении его в форме Form1 с помощью функции Task.Factory.StartNew.
Когда я добавляю новую строку в таблицу данных, представление datagridview не будет обновляться, пока я не прокрутлю ее. и когда я очищаю всю таблицу данных и добавляю новую строку в таблицу данных, представление datagridview все еще не изменяется, и возникает ошибка при сортировке, щелкнув один из столбцов.
Во-первых, как правильно обновить таблицу данных, которая используется в datagridview в многопоточной среде. во-вторых, как обновить заполнение datagridview после обновления таблицы данных.
Форма1
с использованием System.ComponentModel; использование System.Data; использование System.Diagnostics; пространство имен dgvTest { публичный частичный класс Form1: Форма { // DataTable для торговых историй общедоступная статическая таблица данных? ТорговаяИсторияDT = ноль; общедоступная форма1() { ИнициализироватьКомпонент(); TradeHistoryDT = новый DataTable(); TradeHistoryDT.TableName = "TradeHistory"; TradeHistoryDT.Columns.Add("Время", typeof(DateTime)); TradeHistoryDT.Columns.Add("Сторона", typeof(string)); TradeHistoryDT.Columns.Add("Тикер", typeof(string)); TradeHistoryDT.Columns.Add("Цена", typeof(int)); TradeHistoryDT.Columns.Add("Количество", typeof(int)); } частная пустота button1_Click (отправитель объекта, EventArgs e) { Форма Form2 = новая Форма2(); форма.Показать(); } общественная недействительность add_rows_to_tt (int n) { List new_trades = GenerateRandomTrades(n); ListToDT (new_trades); } общественная недействительность Change_whole_data (int n) { ТорговаяИсторияDT.Очистить(); List new_trades = GenerateRandomTrades(n); ListToDT (new_trades); } public void ListToDT(List new_trades) { foreach (торговля в new_trades) { TradeHistoryDT.Rows.Add(t.ExecuteTime, t.Side, t.Ticker, t.Price, t.Quantity); } } общедоступный статический список GenerateRandomTrades(int NumberOfTrades) { Случайный случайный = новый случайный(); List trades = новый List(); for (int i = 0; i add_rows_to_tt(n)); } частная пустота button3_Click (отправитель объекта, EventArgs e) { int n = int.Parse(textBox1.Text); Task.Factory.StartNew(() =>change_whole_data(n)); } } } Форма2
с использованием системы; использование System.Collections.Generic; использование System.ComponentModel; использование System.Data; использование System.Drawing; используя System.Linq; использование System.Text; использование System.Threading.Tasks; использование System.Windows.Forms; пространство имен dgvTest { публичный частичный класс Form2: Форма { публичная форма2() { ИнициализироватьКомпонент(); dataGridView1.DataSource = Form1.TradeHistoryDT; } } }
Мобильная версия