Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema con DataTable, DataSet



    Vorrei popolare un DataTable utilizzando solamente certe righe di un DataSet.

    Le righe da utilizzare sono contenute in un array di indici.

    allora:

    int[] arr_index = new int[num_record];

    arr_index è l'array degli indici delle righe del dataset che voglio utilizzare.

    temp_dt è la mia DataTable

    ResDS è il DataSet da cui "pescare" le righe che mi servono (opportunamente popolato tramite interrogazione sul database).

    Allora questo è quanto faccio:

    Codice PHP:
    for (int i3=0i3<num_recordi3++) { 
      
    tempDT.Rows.Add(resDS.Tables[0].Rows[arr_index[i3]]);

    mi viene restituito questo errore:
    -----------------------------------------
    Dettagli eccezione: System.ArgumentException: La riga appartiene già a un'altra tabella.
    -----------------------------------------

    ma che cavolo di errore è?! Lo so che la riga appartiene ad un'altra tabella... embhè?!

    Qualcuno mi suggerisce una soluzione per favore?!

    Grazie infinite alla comunità.
    Lupo
    ----

  2. #2

  3. #3
    Codice PHP:
    for (int i3=0i3<num_recordi3++) { 
      
    DataRow dr temp_dt.NewRow();
      
    dr resDS.Tables[0].Rows[arr_index[i3]];
      
    temp_dt.ImportRow(dr);

    Lupo
    ----

  4. #4
    Quote Originariamente inviata da Lupo Visualizza il messaggio


    Vorrei popolare un DataTable utilizzando solamente certe righe di un DataSet.
    Allora questo è quanto faccio:
    Codice PHP:
    for (int i3=0i3<num_recordi3++) { 
      
    tempDT.Rows.Add(resDS.Tables[0].Rows[arr_index[i3]]);

    mi viene restituito questo errore:
    -----------------------------------------
    Dettagli eccezione: System.ArgumentException: La riga appartiene già a un'altra tabella.
    -----------------------------------------
    L'errore avviene perché la riga contiene anche il nome della tabella, se cerchi di aggiungerla ad una tabella con un'altro nome ti viene segnalato.

    Per ovviare devi convertire la riga in un array con l'istruzione apposita ItemArray che così perde il nome della tabella:
    codice:
    for (int i3=0; i3<num_record; i3++) { 
      tempDT.Rows.Add(resDS.Tables[0].Rows[arr_index[i3]].ItemArray);

    oppure usare ImportRow che istruisce il compilatore che si vogliono aggiungere dati provenienti da un'altra tabella:
    codice:
    for (int i3=0; i3<num_record; i3++) { 
      tempDT.ImportRow(resDS.Tables[0].Rows[arr_index[i3]]);
    }

    Il post è molto vecchio ma visto che chi incappa in quest'errore lo può leggere, ho pensato di aggiungere una risposta che amplia quella data dall'autore del post.
    Ultima modifica di Rubik2; 19-02-2022 a 04:22
    In programmazione tutto è permesso

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Si puo' fare anche con una select sul datatable.

    codice:
    class Program
    {
        static void Main()
        {
            // Create a table of 5 different players.
            // ... Store their size and team.
            DataTable table = new DataTable("Players");
            table.Columns.Add(new DataColumn("Size", typeof(int)));
            table.Columns.Add(new DataColumn("Team", typeof(char)));
            
            table.Rows.Add(100, 'a');
            table.Rows.Add(235, 'a');
            table.Rows.Add(250, 'b');
            table.Rows.Add(310, 'b');
            table.Rows.Add(150, 'b');
            
            // Search for players above a certain size.
            // ... Require certain team.
            DataRow[] result = table.Select("Size >= 230 AND Team = 'b'");
            foreach (DataRow row in result)
            {
                Console.WriteLine("{0}, {1}", row[0], row[1]);
            }
        }
    }
    fonte:
    https://www.dotnetperls.com/datatable-select

  6. #6
    spero che Lupo in venti anni abbia già risolto

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    non me n'ero accorto

    (comunque secondo me non ha risolto)
    Ultima modifica di djciko; 21-02-2022 a 11:43

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.