724 messaggi dal 11 febbraio 2013
ciao
in un button click vorrei aggiornare la UI e nello specifico un datagridview

il codice è questo
private DataTable CreateControlTable()
        {
            var table = new DataTable();

            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Data", typeof(int));

            return table;
        }

        private async Task AddRowToTable(DataTable table, string Name, int Data)
        {
            await Task.Run(() =>
            {
                table.Rows.Add(Name, Data);
            });          
        }
        private async void button1_Click(object sender, EventArgs e)
        {
            var table = CreateControlTable();

            dataGridView1.DataSource = table;

            Thread.Sleep(3000);//Long Task...
            await AddRowToTable(table, "Pippo", 1);

            Thread.Sleep(3000);//Long Task...
            await AddRowToTable(table, "Pluto", 2);

            Thread.Sleep(3000);//Long Task...
            await AddRowToTable(table, "Paperino", 3);

        }


come posso aggiornare datagridview
grazie
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao,
il DataGridView si aggiorna anche se le righe vengono aggiunte al DataTable dopo che è stato impostato come DataSource. Ecco un esempio: il DataGridView mostrerà sia la riga 1 (aggiunta prima) che la riga 2 (aggiunta dopo).
var table = new DataTable();
table.Columns.Add("Id");
table.Columns.Add("Name");
table.Rows.Add("1", "Riga 1");
dataGridView1.DataSource = table;
table.Rows.Add("2", "Riga 2");


Nel tuo caso che succede esattamente? Il "long task" in cosa consiste?

Per il momento butto lì una revisione ma penso che non sarà corretta dato che mi mancano delle informazioni.
Per esempio non mi è chiaro perché il metodo AddRowToTable debba essere asincrono dato che non contiene operazioni legate a periferiche di I/O.
private void AddRowToTable(DataTable table, string Name, int Data)
{
  table.Rows.Add(Name, Data);         
}

private async void button1_Click(object sender, EventArgs e)
{
  var table = CreateControlTable();

  dataGridView1.DataSource = table;

  await OperazioneAsincrona();
  AddRowToTable(table, "Pippo", 1);

  await OperazioneAsincrona();
  AddRowToTable(table, "Pluto", 2);

  await OperazioneAsincrona();
  AddRowToTable(table, "Paperino", 3);

}

Modificato da BrightSoul il 20 novembre 2018 00.02 -

Enjoy learning and just keep making
724 messaggi dal 11 febbraio 2013
Hai ragione non cè bisogno di creare un altro thread

Il metodo che aggiunge il record al gridview era cosi
AddRowToTable(table, "Articoli", await Articoli.GetArticoliRowsAsync(), "Product", await Product.GetProductRowsAsync());


Nei long taks mi riferisco a serializzazione e deserializzazione da sqlserver vs SQLite

ciao e grazie
Modificato da jjchuck il 20 novembre 2018 09.26 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.