Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von shufflekeks
Thema: datagridview Werte übernehmen klappt nur nach Lust und Laune
Am im Forum: GUI: Windows-Forms

Hallo Ezio,

Zitat
The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. The foreach statement is used to iterate through the collection to get the information that you want, but can not be used to add or remove items from the source collection to avoid unpredictable side effects. If you need to add or remove items from the source collection, use a for loop.

Meinst du das?
Ich kann dort lediglich etwas von hinzufügen bzw löschen lesen, aber nichts von ändern. Aber ich werde mich schlau machen, Schande über mein Haupt! ;)

@TH69
Das war ja der Grund für das Benutzen der foreach-Schleife. :)

Thema: datagridview Werte übernehmen klappt nur nach Lust und Laune
Am im Forum: GUI: Windows-Forms

Klappt nun.
Natürlich lag der Kniff, wie vermutet, beim ändern des DataSets.

private void TSItemtelegramman_Click(object sender, EventArgs e)
{
       foreach (DataGridViewRow row in dataGridView1.SelectedRows)
       {
            int ID = (int) row.Cells["IDDatei"].Value;
            SeKonVorlageDataSet.TelegrammeRow zeile = seKonVorlageDataSet.Telegramme.FindByIDDatei(ID);
            zeile.Telegramm_auswählen = true;
        }
}

Thema: datagridview Werte übernehmen klappt nur nach Lust und Laune
Am im Forum: GUI: Windows-Forms

Hallo Community,
ich bin mal wieder verwundert. (Entschuldigung für dieses Thema, aber mir viel absolut nichts passendes ein)

Ich habe ein Grid, wo ich nun ein ContextMenu eingefügt habe. Dort kann man den ersten Wert im Grid ("Telegramm auswählen") false oder true setzen.
Angehen wollte ich es so:

private void TSItemtelegramman_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.SelectedRows)
            {
                row.Cells["Telegramm auswählen"].Value = true;
            }
        }

Das bringt mich zu dem Problem, das wenn nur eine Zeile ausgewählt ist, der wert erst übernommen wird, nachdem ich in eine andere Zelle (außerhalb der Zeile) klicke.
Sind mehrere Zeilen ausgewählt, so werden bis auf die letzte Zeile alle Werte auf true gesetzt.
Dieses Phänomen tritt aber nur manchmal auf. Manchmal klappt es, manchmal wird der Wert auch garnicht gesetzt, ich kann es mir nicht erklären.
Versuche wie

telegrammeTableAdapter.Update(seKonVorlageDataSet);

//oder
dataGridView1.Rows[row.Index].SetValues(new object[] { true });

//oder
seKonVorlageDataSet.Telegramme.Rows[row.Index].CancelEdit();

//oder
dataGridView1.ClearSelection();

brachten keinen Erfolg.
Teilweise bekomme ich sogar eine Exception beim Update (Parallelitätsverletzung).

Ich weiß, dass ich normalerweise nur Werte im DataSet ändern soll und nicht im Grid.
Allerdings habe ich noch keine saubere Möglichkeit gefunden von den SelectedRows auf die Datensätze im DataSet zu schließen.

Danke im Voraus für eure Mühe

Gruß
shufflekeks

Thema: [gelöst] datagridview.DataError-Event fehlerhafte Zeile beibehalten
Am im Forum: GUI: Windows-Forms

Habe das Problem nun gelöst, indem ich mit dem CellEndEdit-Event abfrage, ob der angegebene Wert akzeptiert wird. Ist dies nicht der Fall, so wird der ursprüngliche Wert eingetragen bei einer neuen Zeile lösche ich dann einfach die komplette Zeile.

Thema: [gelöst] datagridview.DataError-Event fehlerhafte Zeile beibehalten
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

dieses datagridview macht mich noch fertig! :(
Folgendes Problem:
Nachdem feuern des DataError-Events wird die fehlerhafte Zeile aus dem Grid gelöscht. Gibt es eine Möglichkeit, die Zeile beizubehalten?
Also eine Eigenschaft, oder muss ich mir jedes mal die Werte der aktuellen Zeile merken, für den Fall, dass das DataError-Event ausgelöst wird?

Lieben Gruß
shufflekeks

Thema: String passgenau zerteilen (enthaltene Zahl performant ermitteln)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zommi,

genau so hatte ich es gemeint, vielen Dank für deine Mühe.
Hatte die Idee mit alle Nullen, unabhängig wieviele es sind, schon berücksichtigt.
Tu mich allerdings noch schwer mit der Syntax.
Hab Regex bisher nur einmal kurz in Scala programmiert.
Aber das wird schon.

Vielen Dank für eure Mühen!

Lieben Gruß
shufflekeks

P.s.: Nachdem ich mir nochmal die Replace-Methode angeschaut habe ist alles sonnenklar! Ansonsten habe ich ja noch das Tutorial als Gedankenstütze!
Danke :)

Thema: [Artikel] Regex-Tutorial
Am im Forum: Artikel

Hab noch einen Fehler gefunden.

6. Übungen Nr. 6

Ziffer Strich Ziffer Strich Ziffer Strich (Bsp: 1-7-6)
^\d-\d-\d$

Ich denke das letzte Strich ist zuviel, zumindest wenn man dem Beispiel und der Lösung folgt.

Gruß
shufflekeks

Thema: String passgenau zerteilen (enthaltene Zahl performant ermitteln)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

danke für deinen Rat.
Allerdings halte ich mich da an die Vorgabe, dass es IMMER 7 Zeichen sind. Natürlich könnte ich mit Regulären Ausdrücken die Zahl bestimmen, egal wie lang sie ist. Aber den optionalen Teil (wie auch immer er aussieht) muss ich einfach ab einem bestimmten Char übernehmen.
Und sollte tatsächlich (auch wenn es garnicht möglich ist) die Zahl noch nicht zu ende sein, so würde ich sie einfach übernehmen.

foreach (GEDataSet.PROJEKTERow row in GEDataSet.PROJEKTE)
                {
                    int number;
                    int länge = row.PROJEKT.Length;
                    bool result = Int32.TryParse(row.PROJEKT.Substring(1, 6), out number);
                    if (result)
                    {
                        if (länge ≤ 7)
                            Hilf.Rows[i][2] = number;
                        else
                            Hilf.Rows[i][2] = number + row.PROJEKT.Substring(7);
                    }
                    else
                    {
                        if (länge ≤ 7)
                            Hilf.Rows[i][2] = Convert.ToInt32(row.PROJEKT.Substring(2, 5));
                        else
                            Hilf.Rows[i][2] = Convert.ToInt32(row.PROJEKT.Substring(2, 5)) + row.PROJEKT.Substring(7);
                    }
                    i++;
                }

Natürlich könnte Ich auf die Nase fallen, wenn es irgendwann man ein Projekt gibt, welches mit 3 Buchstaben beginnt..

Du hast mich überzeugt, ich nehme die Regulären :)

Gruß
shufflekeks

Thema: String passgenau zerteilen (enthaltene Zahl performant ermitteln)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Also TryParse dauert ca. 1 Sekunde, während einer der zwei Blöck schon 15 Sekunden braucht. Ganz klare Verbesserung!

Werde dennoch die Regulären Ausdrücke ausprobieren :)

Gruß
ein sehr glücklicher shufflekeks :D

Thema: String passgenau zerteilen (enthaltene Zahl performant ermitteln)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Coffeebean,

Ich werde es sowohl mit TryParse als auch mit RegEx versuchen, vielen Dank für die Hinweise.
Den ersten Teil brauche ich nicht als Nummer, das Konvertieren mach ich lediglich zum entfernen der führenden Nullen.

Gruß
shufflekeks

Thema: String passgenau zerteilen (enthaltene Zahl performant ermitteln)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,
ich habe folgende sehr langsame Lösung zu folgendem Problem.
Ich habe etliche Strings (ca. 6000), die ich zerteilen muss.
Bsp: G000123-Example
Mein Ziel: Lediglich die Zahl ohne führende nullen und der optionale Teil (-Example).
Mein Vorschlag:

foreach (GEDataSet.PROJEKTERow row in GEDataSet.PROJEKTE)
   try
   {
      test.Add(Convert.ToInt32(row.Projekte.Substring(1, 6)) + row.Projekte.Substring(7));
   }
   catch
   {
   }
   finally
   {
      test.Add(Convert.ToInt32(row.Projekte.Substring(1, 6)).ToString());
   }

Jetzt kann es aber auch sein, dass es zwei Buchstaben gefolgt von einer Zahl ist (GE00123). Dort schlägt natürlich die Konvertierung fehl. Auch das kann ich mit try-catch umgehen.

Dies ist, wie man sich vorstellen kann unglaublich langsam (ca. 20 Sekunden).
Hat jemand eine schnellere Idee?
Vielen Dank für die Hilfe! :)

Thema: DataSet richtig aktualisieren
Am im Forum: Datentechnologien

 seKonVorlageDataSet.Telegramme.DefaultView.Sort = "Position asc";

foreach (DataRowView drow in seKonVorlageDataSet.Telegramme.DefaultView)
       {
       SeKonVorlageDataSet.TelegrammeRow row = (SeKonVorlageDataSet.TelegrammeRow) drow.Row; 

So habe ich es nun gelöst, sollte jemand also irgendwann mal dasselbe Problem haben.

Vielen Dank an emtcho für seinen Senf ( ) und an alle anderen für die "Hilfe".

Und verzeiht mir nochmal meine Unwissenheit, doch wenn man grade mal 3 Wochen damit arbeitet, Begriffe wie Hyperthreading, Backgroundworker, Timer, SQL usw noch nie zuvor gehört hat ist es wohl mehr als verständlich, das mir Grundlagen fehlen. Doch ich arbeite daran!

Thema: DataSet richtig aktualisieren
Am im Forum: Datentechnologien

Ohja, da fehlen tatsächlich Grundlagen. Arbeite erst seit knapp 3 Wochen mit C#.

1. Wie genau meinst du das? Wie bekomme ich die Verbindung von dem, was ich im Grid sehe und dem, womit ich in der foreach-Schleife arbeite?

2. Wieso ist Access keine Datenbank? Diesen Zusammenhang verstehe ich nicht.

Ich möchte eine Reihenfolge von Dateien festlegen und diese dann in der vorgegebenen Reihenfolge kopieren.

Gruß Pascal

Thema: DataSet richtig aktualisieren
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: ACCESS 2007, VS 2010 .NET 4.0

Folgendes Problem:
Ich habe Datensätze durch ein Grid dargestellt, dort kann ich alle einträge ändern usw.
Unter anderem auch die Position, die sofort sortiert werden.

dataGridView1.Sort(dataGridView1.Columns["Position"], ListSortDirection.Ascending);

Wenn ich nun mit einer foreach-Schleife

foreach (SeKonVorlageDataSet.TelegrammeRow row in seKonVorlageDataSet.Telegramme.Rows)
die Datensätze durchlaufe, bekomme ich die Reihenfolge, wie sie vor der Änderung waren, allerdings nicht die neue.

Und mein Update

telegrammeTableAdapter.Adapter.Update(seKonVorlageDataSet);
hilft mir da leider nicht.

Muss ich tatsächlich mit einer Schleife die Einträge nach Position sortieren? (Anstelle der foreach)

Lieben Gruß
Pascal