Laden...

Buttons in Abhängigkeit von Aktionen bei früherem Programmstart verändern

Erstellt von cybermicha vor 10 Jahren Letzter Beitrag vor 10 Jahren 889 Views
Thema geschlossen
C
cybermicha Themenstarter:in
13 Beiträge seit 2010
vor 10 Jahren
Buttons in Abhängigkeit von Aktionen bei früherem Programmstart verändern

Hallo zusammen.
Ich stehe vor einem Problem zu dem mir bisher keine elegante Lösung eingefallen ist.

Ich habe ein Programm geschrieben, das ca 40 Buttons auf 2 panels beinhaltet.
Nach einem Klick auf einen Button wird dieser sowie das aktuelle Datum + Uhrzeit in einer SQL Datenbank abgelegt.
Danach wird er disabled und sein Hintergrund auf Grün gesetzt.

Beendet man das Programm nun sind nach einem Neustart natürlich alle Buttons wieder aktiv und grau.

Nun Suche ich eine Möglichkeit für folgende Funktion:

  • Bei Programmstart Einträge aus SQL lesen
  • Prüfen welche Buttons vom aktuellen Tag in dem Ergebnis vorkommen
  • Anhand dieses Ergebnisses die entsprechenenden Buttons mit einem grünen Hintergrund versehen und auf disabled setzen.

Spalten in der DB sind "Tour" und "Date".

internal void readAll() {
            string strSQL = "SELECT * FROM dbo.TOUR";
            SqlCommand cmd = new SqlCommand(strSQL, con);
            try
            {
                string Datenow = DateTime.Now.ToShortDateString();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                try
                {
                    string s = reader["Date"].ToString();
                    s = s.Substring(0, 10);
                    Console.WriteLine(s + " " + Datenow);
                    if (Datenow == s)
                    {
                        Console.WriteLine(" 1111 ");
                    }
                }
                catch (Exception e) {
                    Console.WriteLine("" + e);
                }
                reader.Close();
            }
            catch (SqlException ex)
            {
                Console.WriteLine("" + ex);
            }
        }

Das Console.Writeline funktioniert soweit. Erster Ansatzz war, dass ich mir reader["Tour"] hole und per cast auf Button anspreche aber das geht ja nicht mit einem string.

Hat jemand eine Idee / Denkanstoss für mich? Mit Datenbindungen kenne ich mich leider nicht aus.

Viele Grüße
Micha

D
615 Beiträge seit 2009
vor 10 Jahren

Hallo Cybermicha

Da es sich um Controls-Zustände handelt würde ich das wie folgt lösen:

Erstell eine Klasse àlà



public string ControlId{get;set;}
public bool Enabled{get;set;}
public string Color {get;set;} ***


(*** da Color nicht serializable ist, würde ich es in HEX convertieren, daher String).

Nun erstellst eine List<DeineKlasse> mit allen Informationen welche du gespeichert haben willst. Serializierst diese Liste und speicherst sie in die DB. Beim App_Start kannst du diese Liste auslesen und die Control Zustände von der DB setzen lassen...

Beste Grüsse

Diräkt

C
cybermicha Themenstarter:in
13 Beiträge seit 2010
vor 10 Jahren

Hallo Diräkt.
Ja das wäre eine Idee. Also speichere ich dann z.b. btn1.Backcolor = .. in die Liste?

Nur wie bekomme ich diese Liste zur Laufzeit immer aktualisiert? oder meinst du eine Liste pro Button?

Im Laufe des Tages werden diese Buttons nach und nach gedrückt und da muss diese Lsite dann auch immer aktuell gehalten werden.

LG
Micha

D
615 Beiträge seit 2009
vor 10 Jahren

Hallo cybermicha

Ich glaub du musst erst mal unterscheiden zwischen :

**=> Live Aktualisierung **
( Wenn Peter in Afrika Button1 rot einfärbt (z.B durch ein Klick) muss bei Hans in Deutschland dieser auch rot werden. )

**=> Aktualisierung bei App Start **
( Wenn die App startet, muss der Status geladen werden )

Nur wie bekomme ich diese Liste zur Laufzeit immer aktualisiert? oder meinst du eine Liste pro Button?

Du könntest bspw. deine Controls einer List<Controls> übergeben. Dazu eine Method schreiben welche sowas tut:


var result = new  List<MySerializableClass>();
 foreach (var item in MyRegistredControlCollection)
            {
               result.Add(new MySerializableClass(){Id=item.Id,Enabled=item.Enabled .....});
            }

Nun kannst du result serializieren und in die DB speichern. Wann du es speicherst und lädst ist "dir überlassen". Bei "Aktualisierung bei App Start" natürlich beim starten der App. Bei Live Aktualisierung, müsstest du über ein Callback bei Änderungen informiert werden. Da ist es ein wenig komplizierter... Stichwörter dazu wären : "WCF;Dublex;Signal R" ....

Beste Grüsse

Diräkt

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo cybermicha,

wie man Controls dynamisch anspricht, steht in [FAQ] Variablennamen zur Laufzeit zusammensetzen (und fällt, wie jede der anderen, thematisch sehr unterschiedlichen Fragen für sich genommen unter Grundlagen.

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1, 1.1.1 und 1.2.

herbivore

Thema geschlossen