Ich suche eine elegante Lösung um gescannte Produkte in einem Warenkorb Produktespezifisch zu zählen. Derzeit wird mir pro Scann ein separater Eintrag erstellt, auch wenn das gleiche Produkt mehrfach vorkommt. Das soll sich änder, indem mehrfach vorkommende Produkte nur einmal erscheinen aber entsprechend hochgezählt werden.
Der Warenkorb ist eine ListView / Menge / X / Produkt / Preis / etc. Die Preisberechnung ist hier nicht zu berücksichtigen.
Der Scann vergleicht den Barcode mit der Datenbank / Menge / Artikel_Name / Artikel_Nummer / Barcode / etc. und fügt das Produkt bei einem Treffer in dem Warenkorb ein.
Ich habe das wie unten ersichtlich mit einem Timer versucht um den Artikelnamen jederzeit vergleichen zu können. Das Ganze funktioniert aber nur mit einem Produkt und will nicht mehr, wenn mehrere Produkte gescannt werden. Oder es Zählt über alle Produkt gleichermassen. Das ganze muss wahrscheinlich über zwei ineinendergelegte Schlaufen realisiert werden, nur stehe ich da gerade etwas auf dem Schlauch. Vielleicht hat das schon mal jemand gemacht und kennt eine bessere Lösung? Vielen Dank!
int C = 1;
string ItemName;
private void axOPOSScanner1_DataEvent(object sender, AxOposScanner_CCO._IOPOSScannerEvents_DataEventEvent e)
{
TimerScanner.Start();
SqlConnection cn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Path\Artikel.mdf;Integrated Security=True");
try
{
cn.Open();
if (axOPOSScanner1.ScanDataLabel.Length ≥ 13) //EAN 13
{
string SearchQuerry = "SELECT * FROM Artikel WHERE Barcode = '" + axOPOSScanner1.ScanDataLabel.Substring(0, 13);
SqlCommand com = new SqlCommand(SearchQuerry, cn);
SqlDataReader sqlReader = com.ExecuteReader();
while (sqlReader.Read())
{
ListViewItem item = new ListViewItem("" + C ); //produktcount);
item.SubItems.Add("X");
item.SubItems.Add(sqlReader.GetValue(1).ToString()); //Artikel
item.SubItems.Add(sqlReader.GetValue(5).ToString());
item.SubItems.Add(sqlReader.GetValue(3).ToString()); //Barcode
item.SubItems.Add(sqlReader.GetValue(4).ToString());
float num1 = float.Parse(string.Format("{0:0.00}", sqlReader.GetValue(4).ToString()));
float num2 = float.Parse(string.Format("{0:0.00}", sqlReader.GetValue(5).ToString()));
item.SubItems.Add("" + num2 / (100 + num1) * num1);
//listWarenkorbMain.Items.Add(item);
if (C == 1)
{
listWarenkorbMain.Items.Add(item);
}
if (ItemName != sqlReader.GetValue(1).ToString())
{
C = C + 1;
}
}
sqlReader.Close();
com.Dispose();
cn.Close();
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
private void TimerScanner_Tick(object sender, EventArgs e)
{
for (int i = 0; i ≤ listWarenkorbMain.Items.Count - 1; i++)
{
ItemName = listWarenkorbMain.Items[i].SubItems[2].Text;
}
TimerScanner.Stop();
}