none
DataTable da file Csv. RRS feed

  • Domanda

  • Salve a tutti stò progettando un software mobile per l'università.
    E' la prima volta che mi trovi ad utilizzare Visual Studio e C#.
    Bene. Dovrei creare un Form che visualizzi in una tabella un file csv.
    Ho pensato a questo, ma non funziona.
    La tabella risulta essere vuota!
    Stò impazzendo.

    using System;
    
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Data;
    
    namespace SmsMobilev1
    {
      public partial class viewHistory : Form
      {
        public const string historyFileName = @"\storico.csv";
        public const string historySubPath = @"\textFile";
        public const char splitColumn = ';';
    
        public viewHistory()
        {
          InitializeComponent();
        }
    
        private DataTable setHistoryTable()
        {
          // Istanzio la DataTable
          DataTable historyTable = new DataTable("historyTable");
          DataColumn column;
          DataRow row;
    
          // Setto le colonne
          column = new DataColumn();
          column.DataType = System.Type.GetType("System.String");
          column.ColumnName = "TimeStamp";
          column.ReadOnly = true;
    
          // Aggiungo la colonna alla collezione
          historyTable.Columns.Add(column);
    
          column = new DataColumn();
          column.DataType = System.Type.GetType("System.String");
          column.ColumnName = "ValoreMax";
          column.ReadOnly = true;
    
          // Aggiungo la colonna alla collezione
          historyTable.Columns.Add(column);
    
          column = new DataColumn();
          column.DataType = System.Type.GetType("System.String");
          column.ColumnName = "Unità";
          column.ReadOnly = true;
    
          // Aggiungo la colonna alla collezione
          historyTable.Columns.Add(column);
    
          column = new DataColumn();
          column.DataType = System.Type.GetType("System.String");
          column.ColumnName = "NumeroFault";
          column.ReadOnly = true;
    
          // Aggiungo la colonna alla collezione
          historyTable.Columns.Add(column);
    
          // Path del file, per la popolazione della tabella
          string path = Path.GetDirectoryName(
              System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
              + historySubPath + historyFileName;
    
          // Creazione StreamReader
          if (File.Exists(path))
          {
            FileStream historyFile = new FileStream(path, FileMode.Open, FileAccess.Read);
            StreamReader historyReader = new StreamReader(historyFile);
            string[] line = historyReader.ReadLine().Split(new Char[] { splitColumn });
            for (int i = 1; i <= countLines(path); i++)
            {
              row = historyTable.NewRow();
              row["TimeStamp"] = line[0];
              row["ValoreMax"] = line[1];
              row["Unità"] = line[2];
              row["NumeroFault"] = line[3];
              historyTable.Rows.Add(row);
            }
            historyReader.Close();
            historyFile.Close();
          }
          return historyTable; 
        }
    
        private static int countLines(string path)
        {
          int counter = 0;
          if (File.Exists(path))
          {
            string line;
            // Lettura del file riga per riga. 
            StreamReader file =
              new StreamReader(path);
            while ((line = file.ReadLine()) != null)
            {
              counter++;
            }
            file.Close();
          }
          return counter;
        }
      }
    }
    
    namespace SmsMobilev1
    {
      partial class viewHistory
      {
        /// <summary>
        /// Variabile di progettazione necessaria.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
    
        /// <summary>
        /// Liberare le risorse in uso.
        /// </summary>
        /// <param name="disposing">ha valore true se le risorse gestite devono essere eliminate, false in caso contrario.</param>
        protected override void Dispose(bool disposing)
        {
          if (disposing && (components != null))
          {
            components.Dispose();
          }
          base.Dispose(disposing);
        }
    
        #region Codice generato da Progettazione Windows Form
    
        /// <summary>
        /// Metodo necessario per il supporto della finestra di progettazione. Non modificare
        /// il contenuto del metodo con l'editor di codice.
        /// </summary>
        private void InitializeComponent()
        {
          this.historyDataSet = new System.Data.DataSet();
          this.historyTable = setHistoryTable();
          this.dataGrid1 = new System.Windows.Forms.DataGrid();
          ((System.ComponentModel.ISupportInitialize)(this.historyDataSet)).BeginInit();
          ((System.ComponentModel.ISupportInitialize)(this.historyTable)).BeginInit();
          this.SuspendLayout();
          // 
          // historyDataSet
          // 
          this.historyDataSet.DataSetName = "NewDataSet";
          this.historyDataSet.Namespace = "";
          this.historyDataSet.Prefix = "";
          this.historyDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
          // 
          // historyTable
          // 
          this.historyTable.DisplayExpression = "";
          this.historyTable.Prefix = "";
          this.historyTable.TableName = "historyTable";
          // 
          // dataGrid1
          // 
          this.dataGrid1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
          this.dataGrid1.DataSource = this.historyDataSet;
          this.dataGrid1.Location = new System.Drawing.Point(0, 0);
          this.dataGrid1.Name = "dataGrid1";
          this.dataGrid1.Size = new System.Drawing.Size(240, 294);
          this.dataGrid1.TabIndex = 0;
          // 
          // viewHistory
          // 
          this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
          this.AutoScroll = true;
          this.ClientSize = new System.Drawing.Size(240, 294);
          this.Controls.Add(this.dataGrid1);
          this.Name = "viewHistory";
          this.Text = "viewHistory";
          ((System.ComponentModel.ISupportInitialize)(this.historyDataSet)).EndInit();
          ((System.ComponentModel.ISupportInitialize)(this.historyTable)).EndInit();
          this.ResumeLayout(false);
    
        }
    
    
        #endregion
    
        private System.Data.DataSet historyDataSet;
        private System.Data.DataTable historyTable;
        private System.Windows.Forms.DataGrid dataGrid1;
    
      }
    }
    

    mercoledì 6 luglio 2011 22:34

Risposte

Tutte le risposte

  • Grazie per l'aiuto, ma il mio problema non è risolto.
    Stò parlando di un applicazione Windows Mobile 6 e non posso utilizzare OleDbConnection .
    Comunque il mio problema non è tanto popolare la tabella, infatti ci dovrei essere riuscito, quanto associarla al DataSet e al DataGrid!
    Spero di ricevere aiuto.
    Buona giornata! 
    giovedì 7 luglio 2011 08:45
  • Perchè usi una DataTable?

    Crea una classe ad-hoc e leggi i contenuti, soluzione OOP, e senza l'overhead dei DataSet:
    var lines = File.ReadAllLines(path);
    
    var customList = new CustomList();
    
    foreach (var line in lines)
    {
      var values = line.Split(',');
    
      customList.Add(CustomFromValues(values));
    }
    
    public Custom CustomFromValues(string[] values)
    {
      var custom = new Custom();
    
      custom.Name = values[0];
      custom.Exams = int.Parse(values[1]);
      custom.BirthDate = DateTime.Parse(values[2]);
    
      return custom;
    }
    
    public class Custom
    {
      public string Name { get; set; } 
    
      public int Exams { get; set; } 
    
      public DateTime BirthDate { get; set; } 
    }
    


    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 09:58
  • Uso la DataTable perchè devo visualizzare i dati in forma tabellare.
    Per ciò, da ciò che ho capito:

    Creo un tabella contenente i miei dati.
    Collego la tabella ad un DataSet.
    Collego la tabella ad un DataGrid.

    Ora il mio problema è semplice. Ho rinunciato a scrivere direttamente il codice, ed ho creato la tabella con le sue colonne, collegata al DataSet e al DataGrid direttamente dalla progettazione dell'interfaccia grafica.
    Bene, ora non riesco a capire ... Dove devo aggiungere le righe alla tabella???

    Prima che le componenti vengano inizializzate? Impossibile, perchè i campi non sono ancora istanziati!
    Dopo? Non avrebbe senso, dato che mi visualizzerebbe la tabella vuota!
    In InitializeComponent() impossibile, dato che non vuole (visual studio) che modifichi quella parte.

    Questo è il risultato.Devo solo capire dove mettere le istruzioni di aggiunta righe!

     

    namespace prove
    {
      partial class Form2
      {
        /// <summary>
        /// Variabile di progettazione necessaria.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
    
        /// <summary>
        /// Liberare le risorse in uso.
        /// </summary>
        /// <param name="disposing">ha valore true se le risorse gestite devono essere eliminate, false in caso contrario.</param>
        protected override void Dispose(bool disposing)
        {
          if (disposing && (components != null))
          {
            components.Dispose();
          }
          base.Dispose(disposing);
        }
    
        #region Codice generato da Progettazione Windows Form
    
        /// <summary>
        /// Metodo necessario per il supporto della finestra di progettazione. Non modificare
        /// il contenuto del metodo con l'editor di codice.
        /// </summary>
        private void InitializeComponent()
        {
          this.historyDataSet = new System.Data.DataSet();
          this.historyTabel = new System.Data.DataTable();
          this.TimeStamp = new System.Data.DataColumn();
          this.ValoreMax = new System.Data.DataColumn();
          this.Unità = new System.Data.DataColumn();
          this.nFault = new System.Data.DataColumn();
          this.historyDataGrid = new System.Windows.Forms.DataGrid();
          ((System.ComponentModel.ISupportInitialize)(this.historyDataSet)).BeginInit();
          ((System.ComponentModel.ISupportInitialize)(this.historyTabel)).BeginInit();
          this.SuspendLayout();
          // 
          // historyDataSet
          // 
          this.historyDataSet.DataSetName = "historyDataSet";
          this.historyDataSet.Namespace = "";
          this.historyDataSet.Prefix = "";
          this.historyDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
          // 
          // historyTabel
          // 
          this.historyTabel.Columns.AddRange(new System.Data.DataColumn[] {
          this.TimeStamp,
          this.ValoreMax,
          this.Unità,
          this.nFault});
          this.historyTabel.DisplayExpression = "";
          this.historyTabel.Prefix = "";
          this.historyTabel.TableName = "historyTabel";
          // 
          // TimeStamp
          // 
          this.TimeStamp.Caption = "TimeStamp";
          this.TimeStamp.ColumnMapping = System.Data.MappingType.Element;
          this.TimeStamp.ColumnName = "TimeStamp";
          this.TimeStamp.DataType = typeof(string);
          this.TimeStamp.DateTimeMode = System.Data.DataSetDateTime.UnspecifiedLocal;
          this.TimeStamp.Expression = "";
          this.TimeStamp.Prefix = "";
          // 
          // ValoreMax
          // 
          this.ValoreMax.ColumnMapping = System.Data.MappingType.Element;
          this.ValoreMax.ColumnName = "ValoreMax";
          this.ValoreMax.DataType = typeof(string);
          this.ValoreMax.DateTimeMode = System.Data.DataSetDateTime.UnspecifiedLocal;
          this.ValoreMax.Expression = "";
          this.ValoreMax.Prefix = "";
          // 
          // Unità
          // 
          this.Unità.Caption = "Unità";
          this.Unità.ColumnMapping = System.Data.MappingType.Element;
          this.Unità.ColumnName = "Unità";
          this.Unità.DataType = typeof(string);
          this.Unità.DateTimeMode = System.Data.DataSetDateTime.UnspecifiedLocal;
          this.Unità.Expression = "";
          this.Unità.Prefix = "";
          // 
          // nFault
          // 
          this.nFault.Caption = "nFault";
          this.nFault.ColumnMapping = System.Data.MappingType.Element;
          this.nFault.ColumnName = "nFault";
          this.nFault.DataType = typeof(string);
          this.nFault.DateTimeMode = System.Data.DataSetDateTime.UnspecifiedLocal;
          this.nFault.Expression = "";
          this.nFault.Prefix = "";
          // 
          // historyDataGrid
          // 
          this.historyDataGrid.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
          this.historyDataGrid.DataSource = this.historyDataSet;
          this.historyDataGrid.Location = new System.Drawing.Point(0, 0);
          this.historyDataGrid.Name = "historyDataGrid";
          this.historyDataGrid.Size = new System.Drawing.Size(239, 293);
          this.historyDataGrid.TabIndex = 0;
          // 
          // Form2
          // 
          this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
          this.AutoScroll = true;
          this.ClientSize = new System.Drawing.Size(240, 294);
          this.Controls.Add(this.historyDataGrid);
          this.Name = "Form2";
          this.Text = "Form2";
          ((System.ComponentModel.ISupportInitialize)(this.historyDataSet)).EndInit();
          ((System.ComponentModel.ISupportInitialize)(this.historyTabel)).EndInit();
          this.ResumeLayout(false);
    
        }
    
        #endregion
    
        private System.Data.DataSet historyDataSet;
        private System.Data.DataTable historyTabel;
        private System.Data.DataColumn TimeStamp;
        private System.Data.DataColumn ValoreMax;
        private System.Data.DataColumn Unità;
        private System.Data.DataColumn nFault;
        private System.Windows.Forms.DataGrid historyDataGrid;
    
      }
    }
    

    giovedì 7 luglio 2011 10:16
  • drugoi7 wrote:

    Salve a tutti stò progettando un software mobile per l'università.
    E' la prima volta che mi trovi ad utilizzare Visual Studio e C#.
    Bene. Dovrei creare un Form che visualizzi in una tabella un file csv.
    Ho pensato a questo, ma non funziona.
    La tabella risulta essere vuota!
    Stò impazzendo.

    Con tutta probabilità non hai fatto errori nel creare la datatable ma hai solo dimenticato di impostare lo stato delle datarow.
    La datatable ha il changetracking integrato per cui lo stato delle righe sarà "inserted".
    Chiama tuadatatable.AcceptChanges(); e vedi se ti risolve il problema.


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    giovedì 7 luglio 2011 10:43
  • Uso la DataTable perchè devo visualizzare i dati in forma tabellare.
    La modellazione dell'applicazione non dovrebbe essere basata su come i dati vengono presentati.

    In ogni caso, visualizzare i dati in forma tabellare non significa doverli avere in forma tabellare :)
    Prima che le componenti vengano inizializzate? Impossibile, perchè i campi non sono ancora istanziati!
    Dopo? Non avrebbe senso, dato che mi visualizzerebbe la tabella vuota!
    In InitializeComponent() impossibile, dato che non vuole (visual studio) che modifichi quella parte.

    Questo è il risultato.Devo solo capire dove mettere le istruzioni di aggiunta righe!
    Puoi bindare la DataGrid anche con una collection custom collection.
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 11:02
  • Matteo Migliore wrote:

    La modellazione dell'applicazione non dovrebbe essere basata su come i dati vengono presentati.

    In ogni caso, visualizzare i dati in forma tabellare non significa doverli avere in forma tabellare :)

    Dai Matteo, ci possono essere mille motivi per cui uno vuole usare una datatable. Si va dal caso in cui non ha avuto tempi/modi per approfondire le alternative a casi in cui la scelta ha comunque senso e va bene usare la datatable (per esempio se lo schema non è noto a priori come spesso capita nei file csv).

    E poi aprire questi discorsi su un thread di ng a mio avviso non porta ad alcun risultato. L'argomento è troppo vasto per affrontarlo in una manciata di parole.

    Non è tutto rosso o nero ... ;)


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    giovedì 7 luglio 2011 11:14
  • Dai Matteo, ci possono essere mille motivi per cui uno vuole usare una datatable. Si va dal caso in cui non ha avuto tempi/modi per approfondire le alternative a casi in cui la scelta ha comunque senso e va bene usare la datatable (per esempio se lo schema non è noto a priori come spesso capita nei file csv).

    Ha detto che è un progetto universitario, per cui ho pensato di indirizzarlo verso una classe, che gli fa scrivere meno codice :), e come esempio penso sia più formativo. Non è "odio" nei confronti dei DataSet, ma in questo caso, anche per configurare la DataTable deve scrivere parecchio codice.

    E poi aprire questi discorsi su un thread di ng a mio avviso non porta ad alcun risultato. L'argomento è troppo vasto per affrontarlo in una manciata di parole.

    Non è tutto rosso o nero ... ;)

    No, infatti, è tutto rosso... :D. Scherzo.

    Non gli ho consigliato una custom collection per avversione nei confronti dei DataSet, ma solo perchè mi sembra la soluzione più semplice in questo caso :).
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 11:24
  • Matteo Migliore wrote:

    Non gli ho consigliato una custom collection per avversione nei confronti dei DataSet, ma solo perchè mi sembra la soluzione più semplice in questo caso :).

    Solo se il formato del csv è sempre lo stesso ...


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    giovedì 7 luglio 2011 11:49
  • Non gli ho consigliato una custom collection per avversione nei confronti dei DataSet, ma solo perchè mi sembra la soluzione più semplice in questo caso :).

    Solo se il formato del csv è sempre lo stesso ...

    Se la DataTable la crea hard-coded è comunque dipendente dal formato del CSV no?
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 11:53
  • Matteo Migliore wrote:

    Se la DataTable la crea hard-coded è comunque dipendente dal formato del CSV no?

    Per quello che ne sappiamo quello è solo un esempio (o punto di partenza) e puoi renderlo dinamico con poco sforzo. La classe non puoi renderla dinamica.
    Tuttalpiù puoi usare un expando ma se il csv è grosso le performance le butti dalla finestra.


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    giovedì 7 luglio 2011 12:01
  • Scusate ragazzi, non volevo accendere un dibattito.
    Comunque, per quel che mi riguarda, il problema persiste.
     1. Non ho capito come utilizzare  la custom collection, che comunque dovrebbe essere molto più dispendioso(di righe).
     2. Ho provato ad inserire nelle InitializeComponent() delle righe di codice per l'aggiunta di una riga. l'ho inserita dopo le righe di modifica delle colonne, ma il risultato è:

     

    Input array is longer than the number of columns in this table. 
    La cosa è molto strana.

    Comunque il mio problema è semplice, forse lo stò affrontando nella maniera più sbagliata!
    Io devo visualizzare questi dati in una tabella. Come posso DISEGNARLA da questo file CSV?
    Sinceramente non mi interessa l'estrazione dei dati nel file, ne' il contenitore del file. Il mio unico problema è disegnare questa tabella nel modo più semplice possibile!

    Grazie per l'aiuto comunque! 

     

    P.S. Ho provato ad inserire la riga dopo l'AcceptChange(), ma invano!

    giovedì 7 luglio 2011 12:41
  • drugoi7 wrote:

    Comunque il mio problema è semplice, forse lo stò affrontando nella maniera più sbagliata! Io devo visualizzare questi dati in una tabella. Come posso DISEGNARLA da questo file CSV? Sinceramente non mi interessa l'estrazione dei dati nel file, ne' il contenitore del file. Il mio unico problema è disegnare questa tabella nel modo più semplice possibile!

    Lascio la risposta a Matteo visto che ha iniziato lui questa alternativa ...
     >

    P.S. Ho provato ad inserire la riga dopo l'AcceptChange(), ma invano!

    AcceptChanges va chiamata dopo aver inserito tutte le righe.

    Su msdn ci sono molti esempi.
    Prova con un esempio con meno codice. Se metti troppa carne al fuoco non ne esci.


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    giovedì 7 luglio 2011 12:52
  • Scusate ragazzi, non volevo accendere un dibattito.
    Sono scambi di punti di vista :).
    Comunque, per quel che mi riguarda, il problema persiste.
     1. Non ho capito come utilizzare  la custom collection, che comunque dovrebbe essere molto più dispendioso(di righe).Le righe che ti ho scritto sono sufficienti a popolare la lista e metterla in binding con la DataGrid, non serve altro.

     2. Ho provato ad inserire nelle InitializeComponent() delle righe di codice per l'aggiunta di una riga. l'ho inserita dopo le righe di modifica delle colonne, ma il risultato è:
     
    Input array is longer than the number of columns in this table. 
    La cosa è molto strana.

    Comunque il mio problema è semplice, forse lo stò affrontando nella maniera più sbagliata!
    Io devo visualizzare questi dati in una tabella. Come posso DISEGNARLA da questo file CSV?
    Sinceramente non mi interessa l'estrazione dei dati nel file, ne' il contenitore del file. Il mio unico problema è disegnare questa tabella nel modo più semplice possibile!
    Direi che la direzione è quella giusta, anche perchè di strade possibili non ce ne sono molte altre.
    P.S. Ho provato ad inserire la riga dopo l'AcceptChange(), ma invano!
    Qui può consigliarti Raf :).
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 12:54
  • Ho scritto un esempio in Windows Forms, dovrebbe funzionare anche su Mobile:
    http://sample.codeplex.com/SourceControl/changeset/view/60328#

    I CSV sono scritti in una stringa e non in un file, con File.ReadAllText estrai il contenuto del file e puoi passarlo al metodo CustomerParser.Parse.
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 13:28
  • Ho provato anche con la DataTable, se non ti interessa averla "strongly typed" puoi usare questo metodo: http://sample.codeplex.com/SourceControl/changeset/view/60331#1214575
    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    giovedì 7 luglio 2011 13:40
  • C'è solo una cosa che noto nel tuo codice e mi risulta strana,

    quando generi la datatable, metti tutte le colonne come ReadOnly = true,

    poi però crei le datarow ed assegni i valori.

    Mi risulta (anche se posso sbagliare) che se una colonna è Readonly non puoi assegnarne il valore,

    ma il valore è quello che viene eventualmente prodotto da una select su database tramite dataadapter.

    e' chiaro che se tu non riempi la datatable con un dataadapter ma assegnando i valori ai campi, tali valori vengono ignorati.

    questo almeno guardando la cosa con buonsenso ed avendolo già sperimentato.

    saluti


    Sabrina
    venerdì 8 luglio 2011 07:48
  • Ragazzi, grazie a tutti per l'aiuto, in ogni caso.
    Credo che ci siamo quasi.
    Ho creato una ArrayList contenete i dati che necessitano della Visualizzazione con array di stringhe.
    Ho impostato la DataSource con l'istruzione(non potendola bindare!):

     

    this.historyGrid.DataSource = miaList;
    

     


    La tabella viene "stampata", ma mi mostra immagino i suoi attributi.

     

    http://img543.imageshack.us/img543/5436/tabellag.jpg


    venerdì 8 luglio 2011 20:41
  • Hai guardato l'esempio che ho postato?
    http://sample.codeplex.com/SourceControl/changeset/view/60331#1214575

    Nell'esempio puoi usa sia una DataTable che una CustomCollection.
    new DataTableParser()
      .GetTable("Steve,30\nBill,40", "Name", "Age");
    
    public class DataTableParser
    {
      public DataTable GetTable(string csv, params string[] header)
      {
        var table = new DataTable();
    
        foreach (var column in header)
        {
          table.Columns.Add(column);
        }
    
        foreach (var line in csv.Split('\n'))
        {
          var dr = table.NewRow();
          dr.ItemArray = line.Split(',');
          table.Rows.Add(dr);
        }
    
        return table;
      }
    }
    


    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    • Proposto come risposta Matteo Migliore venerdì 8 luglio 2011 22:37
    • Contrassegnato come risposta Irina Turcu martedì 12 luglio 2011 15:36
    venerdì 8 luglio 2011 21:31
  • Hai guardato l'esempio che ho postato?
    http://sample.codeplex.com/SourceControl/changeset/view/60331#1214575

    Nell'esempio puoi usa sia una DataTable che una CustomCollection.
    new DataTableParser()
     .GetTable("Steve,30\nBill,40", "Name", "Age");
    
    public class DataTableParser
    {
     public DataTable GetTable(string csv, params string[] header)
     {
      var table = new DataTable();
    
      foreach (var column in header)
      {
       table.Columns.Add(column);
      }
    
      foreach (var line in csv.Split('\n'))
      {
       var dr = table.NewRow();
       dr.ItemArray = line.Split(',');
       table.Rows.Add(dr);
      }
    
      return table;
     }
    }
    


    Matteo Migliore

    Blog http://blogs.ugidotnet.org/matteomigliore
    Twitter http://twitter.com/matteomigliore
    CodePlex http://hyperionsdk.codeplex.com
    Ok, ce l'abbiamo fatta!!!
    venerdì 8 luglio 2011 22:08