Προς το περιεχόμενο

Γέμισμα datagridview από text file σε C#


sarakinos

Προτεινόμενες αναρτήσεις

Καλησπέρα παιδιά , έχω ένα DataGridView το οποίο γεμίζει ο χρήστης με τιμές και μετά με ένα κουμπί εξάγω αυτές τις τιμές σε ένα text file ...

Το text file είναι κάπως έτσι

 

mpla mpla Empty mpla

 

Χωρίζω δηλαδή τα πεδία με ένα tab.

 

Έχω σκαλώσει τώρα στο πως θα κάνω load τις τιμές στο DataGridView . Μπορεί κάποιος να μου δείξει κάποιον τρόπο?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλησπέρα παιδιά , έχω ένα DataGridView το οποίο γεμίζει ο χρήστης με τιμές και μετά με ένα κουμπί εξάγω αυτές τις τιμές σε ένα text file ...

Το text file είναι κάπως έτσι

 

mpla mpla Empty mpla

 

Χωρίζω δηλαδή τα πεδία με ένα tab.

 

Έχω σκαλώσει τώρα στο πως θα κάνω load τις τιμές στο DataGridView . Μπορεί κάποιος να μου δείξει κάποιον τρόπο?

 

Δες τα DataGridView.Rows & DataGridViewRow.Cells καθώς μέσο αυτών μπορείς να φορτώσεις χειροκίνητα τιμές στο DataGridView (εκτός και αν προτιμάς ως πηγή κάποιο DataSource).

 

Για παράδειγμα:

 

>
      dataGridView1.Rows.Clear();

           for (int RowCount = 0; RowCount < 5; RowCount++)
           {
               int NewRow = dataGridView1.Rows.Add();

               for (int CelCount = 0; CelCount < 4; CelCount++)
                   dataGridView1.Rows[NewRow].Cells[CelCount].Value =
                       String.Format("{0:D}R{1:D}C", RowCount, CelCount);                
           }            

 

(Θεωρώ ότι έχεις ορίσει στον οπτικό επεξεργαστή του VS το Row του DataGridView).

 

Με αποτέλεσμα:

 

post-41640-0-28651700-1347980049_thumb.png

 

Τώρα αν υποθέσουμε ότι έχουμε ένα πίνακα String όπου κάθε γραμμή χωρίζει τα πεδία της με TAB (\t) θα μπορούσε να γίνει ..

 

>
string[] InputData = { "mpla0-1\tmpla0-2\tEmpty0-3\tmpla0-4",
                      "mpla1-1\tmpla1-2\tEmpty1-3\tmpla1-4",
                      "mpla2-1\tmpla2-2\tEmpty2-3\tmpla2-4",
                      "mpla3-1\tmpla3-2\tEmpty3-3\tmpla3-4",
                      "mpla4-1\tmpla4-2\tEmpty4-3\tmpla4-4"
                    };

           dataGridView1.Rows.Clear();

           for (int RowCount = 0; RowCount < InputData.Length; RowCount++)
           {
               int NewRow = dataGridView1.Rows.Add();

               string[] Field = InputData[RowCount].Split('\t');

               for (int CelCount = 0; CelCount < Field.Length; CelCount++)
                   dataGridView1.Rows[NewRow].Cells[CelCount].Value = Field[CelCount];
           }

 

post-41640-0-51488000-1347980581_thumb.png

 

Υ.Γ.

Μπορεί όλα αυτά τα γίνονται πολύ πιο εύκολα και γρήγορα μέσο LINQ αλλά δεν το έχω ψάξει τόσο.

 

Καλή συνέχεια!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αποφάσισα να το κάνω με xml αρχεία μιας και όλοι λένε ότι είναι καλύτερο και δεν είχα ασχοληθεί ποτέ μαζί τους ξανά στο παρελθόν...

ο κώδικας μου είναι αυτός

 

>
public void saveToFile(DataGridView dv,DataTable dt)
    {
	    int rowCount = dv.Rows.Count;
	    for (int i = 0; i < rowCount--; i++)
	    {
		    dt.Rows.Add(dv.Rows[i]);
		    MessageBox.Show("ok");
	    }
	    dt.WriteXml(xmlFile);	 

    }

 

Το θέμα είναι ότι παράγει λάθος το αρχείο στο τέλος

 

prosopiko.xml

 

>
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
 <Prosopiko>
   <Onoma>DataGridViewRow { Index=0 }</Onoma>
 </Prosopiko>
</DocumentElement>

 

Για κάποιον λόγο δεν περνάει μέσα τα values των κελιών μου από το DataGridView .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν και δεν έχω ασχοληθεί με την XML στο .NET, θα μπορούσες να αποθηκεύσεις κάθε DataGridView.Row ως εξής:

 

>
           DataTable DT = new DataTable("PERSONNEL");

           // Fill DataTable with DataGridView Column names
           foreach (DataGridViewColumn Col in dataGridView1.Columns)
               DT.Columns.Add(Col.Name);

           // Append DataGridView Rows to DataTable
           foreach (DataGridViewRow Row in dataGridView1.Rows)
           {
               DataRow NewRow = DT.Rows.Add();

               for (int RowCnt = 0; RowCnt < Row.Cells.Count; RowCnt++)
                   NewRow.SetField(RowCnt, Row.Cells[RowCnt].Value);
           }

           // Store DataTable (along with Schema!) to XML
           DT.WriteXml("TEST.XML", XmlWriteMode.WriteSchema);

 

Το αρχείο XML που προκύπτει σε αυτή την περίπτωση θα είναι της μορφής:

 

>
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
 <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="PERSONNEL" msdata:UseCurrentLocale="true">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element name="PERSONNEL">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="Column1" type="xs:string" minOccurs="0" />
               <xs:element name="Column2" type="xs:string" minOccurs="0" />
               <xs:element name="Column3" type="xs:string" minOccurs="0" />
               <xs:element name="Column4" type="xs:string" minOccurs="0" />
             </xs:sequence>
           </xs:complexType>
         </xs:element>
       </xs:choice>
     </xs:complexType>
   </xs:element>
 </xs:schema>
 <PERSONNEL>
   <Column1>mpla0-1</Column1>
   <Column2>mpla0-2</Column2>
   <Column3>Empty0-3</Column3>
   <Column4>mpla0-4</Column4>
 </PERSONNEL>
 <PERSONNEL>
   <Column1>mpla1-1</Column1>
   <Column2>mpla1-2</Column2>
   <Column3>Empty1-3</Column3>
   <Column4>mpla1-4</Column4>
 </PERSONNEL>
 <PERSONNEL>
   <Column1>mpla2-1</Column1>
   <Column2>mpla2-2</Column2>
   <Column3>Empty2-3</Column3>
   <Column4>mpla2-4</Column4>
 </PERSONNEL>
 <PERSONNEL>
   <Column1>mpla3-1</Column1>
   <Column2>mpla3-2</Column2>
   <Column3>Empty3-3</Column3>
   <Column4>mpla3-4</Column4>
 </PERSONNEL>
 <PERSONNEL>
   <Column1>mpla4-1</Column1>
   <Column2>mpla4-2</Column2>
   <Column3>Empty4-3</Column3>
   <Column4>mpla4-4</Column4>
 </PERSONNEL>
 <PERSONNEL />
</NewDataSet>

 

Θα μπορούσες να φορτώσεις σχετικά γρήγορα το περιεχόμενο του XML ορίζοντας το DataTable ως DataSource του DataGridView (προσοχή όμως διότι θα προστεθούν τα Column του XML) ως εξής:

 

>
           // Clear DataGridView rows & columns (!)
           dataGridView1.Rows.Clear();
           dataGridView1.Columns.Clear();

           // Load XML directly from file to DataGridView assigning it as a DataSource
           DataTable LDT = new DataTable("PERSONNEL");
           LDT.ReadXml("TEST.XML");            

           dataGridView1.DataSource = LDT;

 

Καλή τύχη!!

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χίλια ευχαριστώ για τις απαντήσεις σου φίλε μου , το υλοποίησα εχθές με τον τρόπο που γράφεις στο τέλος ...

Μου αρέσει όλο και περισσότερο το .NET :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...