dataGridView Spalte in Array ablegen

Gotenks

Mitglied
Aber das Laden der "ids.txt" in form_load ist korrekt oder?

BESTEN DANK, wede ich sofort ausprobieren, bei nicht funktonieren, werde ich mich melden :)

THANK YOU^^^^^^
 
Zuletzt bearbeitet:

Gotenks

Mitglied
Ja das laden in der Form_Load ist richtig dort. :)

Doch bei mir kommt immer dieser Fehler:
Die Eingabezeichenfolge hat das falsche format.

das sagt er bei dieser Zeile:
C#:
ids.Add(Convert.ToInt32(id));

aber warum, habe es in txt-datei umgeändert, schreiben tut er es aber er liest es halt nicht :'(

Ich bekomme mehr fehler meldung :/

Mein Code
C#:
        List<int> ids = null;
        
        
        
        
        private void Form1_Load(object sender, EventArgs e)
        {
           this.ids = new List<int>();
           
           if (File.Exists(@"C:\Users\Default\Desktop\ID.txt"))
           {
               using (StreamReader reader = new StreamReader("C:\\Users\\Default\\Desktop\\ID.txt"))
               {
                   string content = reader.ReadToEnd();
           
                   foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
                   {
                       ids.Add(Convert.ToInt32(id)); // hier kommt der Fehler von oben
                   }
               }
               int[] ID = ids.ToArray();
               lbl.Text = ID.Length.ToString();
           }
           else
           {
               MessageBox.Show("Datei nicht Vorhanden", "Achtung");
           }

           
           
        }


        private void button2_Click(object sender, EventArgs e)
        {
            string output = speicher_Ort + txt1.Text + ".csv";
            StreamWriter streamWriter = new StreamWriter(@output, false);
            
            for (int r = 0; r < dataGridView1.Rows.Count; r++)
            {
                if (Convert.ToBoolean((dataGridView1.Rows[r].Cells["Speichern"] as DataGridViewCheckBoxCell).Value))
                {
                    string rowValue = "";
                    for (int c = 1; c < dataGridView1.ColumnCount; c++)
                    {
                        rowValue += "\"" + dataGridView1.Rows[r].Cells[ c].Value + "\";";
                    }
                    streamWriter.WriteLine(rowValue);

                    ids.Add(Convert.ToInt32(dataGridView1[1, r].Value));

                    using (StreamWriter writer = new StreamWriter("C:\\Users\\Default\\Desktop\\ID.txt")) // das funktoniert ausgezeichnet (:
                    {
                        foreach (int i in ids)
                        {
                            writer.WriteLine(i.ToString());
                        }
                    }


                }
                int[] id = ids.ToArray();
                lbl.Text = id.Length.ToString(); 
            }
            streamWriter.Close();
        }
    




        private void button3_Click(object sender, EventArgs e)
        {       
            DataTable wss_table = result.Tables[0];
            DataTable ap_table = result.Tables[1];
            DataTable haupt_DT = tables.result_DT(wss_table, ap_table);
            DataTable temp_DT = tables.temp_DT();
            DataTable test = new DataTable();
            
            DataColumn[] primArray = new DataColumn[1];
            primArray[0] = haupt_DT.Columns["ID"];            
            haupt_DT.PrimaryKey = primArray;

        
            dataGridView1.DataSource = haupt_DT;

           
            DataGridViewCheckBoxColumn checkBox = new DataGridViewCheckBoxColumn();
            checkBox.HeaderText = "Speichern";
            checkBox.Name = "Speichern";
            checkBox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dataGridView1.Columns.Insert(0, checkBox);

            foreach (int id in ids) // hier kommt der Fehler, wenn ich auf button_3 klicke : Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt...
            {
                DataGridViewRow row = dataGridView1.Rows
                                        .Cast<DataGridViewRow>()
                                        .Where(r => r.Cells[1].Value.ToString().Equals(id.ToString()))
                                        .First();

                if (row != null)
                    dataGridView1.Rows.Remove(row);
            }
            this.dataGridView1.AutoGenerateColumns = true;
}

Hoffe weißt woran das liegt :'(

Lg
 
Zuletzt bearbeitet:

Turri

Erfahrenes Mitglied
Hallo,

Als erstes, bau deinen Button2Click mal so um:
C#:
string output = speicher_Ort + txt1.Text + ".txtv";
StreamWriter streamWriter = new StreamWriter(@output, false);
            
for (int r = 0; r < dataGridView1.Rows.Count; r++)
{
    if (Convert.ToBoolean((dataGridView1.Rows[r].Cells["Speichern"] as DataGridViewCheckBoxCell).Value))
    {
        string rowValue = "";
        for (int c = 1; c < dataGridView1.ColumnCount; c++)
        {
            rowValue += "\"" + dataGridView1.Rows[r].Cells[ c].Value + "\";";
        }
        streamWriter.WriteLine(rowValue);
 
        ids.Add(Convert.ToInt32(dataGridView1[1, r].Value)); 
    }                                
}
streamWriter.Close();
lbl.Text = ids.Count().ToString(); 
using (StreamWriter writer = new StreamWriter("C:\\Users\\Default\\Desktop\\ID.txt")) // das funktoniert ausgezeichnet (:
{
    foreach (int i in ids)
    {
        writer.WriteLine(i.ToString());
    }
}

Ich blicke gerade nicht ganz durch.
Kann er die Datei schon nicht laden (und die Ids aus der Datei in der Liste speichern),
oder steigt dein Programm erst in der foreach Schleife aus?
Wenn keine Objektinstanz da wäre, würde das heissen, das die Liste nicht mit new angelegt wurde... was aber eigentlich der Fall ist.

Kannst du ggf. das Programm zusammenpacken (als zip) und hier anhängen? dann könnte ich besser drüberschauen was schief geht.

Hallo,

hab schon einen Bug gefunden. :)
Ändere mal diese Zeile im Form_Load:
C#:
foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
In diese Zeile:
C#:
foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
 

Gotenks

Mitglied
Hey turri,

Danke für deine Hilfe und deine ode-Snippets :) Dickes Fettes Danke...

Also Button_2, zum Speichern, funktoniert ausgezeichnet :)... Er speichert die ID's in eine sperate txt-Datei, er speichert die nötigen Datensätze, Natürlich nur die die Ausgewählt sind. Also Alles super hier :)

Er macht nur probleme beim einlesen :/
Wenn Ich den Code bei Form1_load eingebe gibt er mir ein fehler raus :/
C#:
 this.ids = new List<int>();
           
           if (File.Exists(@"C:\Users\Default\Desktop\ID.txt"))
           {
               using (StreamReader reader = new StreamReader("C:\\Users\\Default\\Desktop\\ID.txt"))
               {
                   string content = reader.ReadToEnd();
           
                   foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
                   {
                       ids.Add(Convert.ToInt32(id)); // hier kommt der Fehler von oben
                   }
               }
               int[] ID = ids.ToArray();
               lbl.Text = ID.Length.ToString();
           }
           else
           {
               MessageBox.Show("Datei nicht Vorhanden", "Achtung");
           }

Er macht ja schon hier das problem, denn dann kann ich bei Button_3 Aktualisrungs-Button, nicht deine LINQ(foreach-schleife) benutzen, da zunächst keine Onjektinstanz zugewiesen wurde(Fehler vom Kompilier), obwohl ich das bei Form1_Load tue.

Das würde jetzt glaube ich nichts bringen dir die Daten zu geben, da doch alles SQL abhängig ist :/

Weißt du aber zufällig wie ich mittels StreamReader ein List<int> füllen kann? das ist aj das selbe was du gemacht hast, nur das man es als XML-Datei speichert.
Also das speichern ist ja null problem, nur das lesen macht mir probleme, nicht nur mit txt-Datei sonder auch mit xml-Datei.

LG

ps.: Danke zunächst bis hierhin :)

EDIT: Dieser bugfix den du gepostet hast:
Turri hat gesagt.:
Hallo,

hab schon einen Bug gefunden. :)
Ändere mal diese Zeile im Form_Load:
C#:
foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
In diese Zeile:
C#:
foreach (string id in content.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))

Der funktoniert :)

Doch er sagt immer noch: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Hier die Code stelle:
C#:
foreach (int i in ids)
            {
                DataGridViewRow row = dataGridView1.Rows
                                        .Cast<DataGridViewRow>()
                                        .Where(r => r.Cells[1].Value.ToString().Equals(i.ToString())) //Hier kommt eine NullReferenceException wurde nicht behandelt. und darunter steht Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
                                        .First();

                if (row != null)
                    dataGridView1.Rows.Remove(row);
            }

Warum kommt jz eine nullreferenceexception :/

lg

Hallo Turri...

hat sich geklärt :)

Danke für deine Hilfe :)

Danke für die ganzen Code-Snippets und für die ganzen Verbesserungen, Tipps und Anregungen :)

Danke