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:
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
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
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
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
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