Как исправить сброс данных gridview
Каждый раз, когда я добавляю скидку к товару, цена для каждого товара в gridview сбрасывается. Первый вход работает отлично
Вход 1[^]
Проблема начинается со второго входа, где первый входной элемент сбрасывается, если только вы не введете скидку
Вход 2[^]
затем продолжает происходить
Вход 4[^]
я пробовал переписать весь код и отладить его, но не уверен, что что-то не так. Thx за помощь
Что я уже пробовал:
Это лучшее исправление, которое я смог придумать, чтобы поместить все это под отправителем кнопки и сделать его оператором if, но все еще не исправляет его
private void BtnGlobal_Click(object sender, EventArgs e) { Button BtnGlobal = (Button)sender; var global = BtnGlobal.Text; foreach (Book book in MyBooks) { if (global == book.BookName) { Arraytxt.Text = Arraytxt.Text + book.ToString() + Environment.NewLine; } } if (global.ToLower().Contains('%')) { //Discount Button Discount = (Button)sender; //Discount Spliter string DiscountInput = Discount.Text; var DiscountSplit = Regex.Match(DiscountInput, @"\d{2,3}"); int length = DiscountSplit.ToString().Substring(DiscountSplit.ToString().IndexOf(".") + 1).Length; if (length == 2) { int row = 0; row = POSDGV.Rows.Count - 1; POSDGV["Discount", row].Value = "0." + DiscountSplit.ToString(); foreach (DataGridViewRow Column in POSDGV.Rows) { Column.Cells[POSDGV.Columns["FinalPrice"].Index].Value = ((Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) - ((Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[POSDGV.Columns["Discount"].Index].Value)))) *Convert.ToDouble(Column.Cells[POSDGV.Columns["Amount"].Index].Value)); } } else if (length == 3) { int row = 0; row = POSDGV.Rows.Count - 1; POSDGV["Discount", row].Value = 0; foreach (DataGridViewRow Column in POSDGV.Rows) { Column.Cells[POSDGV.Columns["FinalPrice"].Index].Value = (((Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) - ((Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[POSDGV.Columns["Discount"].Index].Value)))) *Convert.ToDouble(Column.Cells[POSDGV.Columns["Amount"].Index].Value))) * 0; } } } else { //Item Buttons foreach (Book book in MyBooks) { if (global == book.BookName) { Arraytxt.Text = Arraytxt.Text + book.ToString() + Environment.NewLine; } } //Item Spliter string input = Arraytxt.Text; var PriceSplit = Regex.Match(input, @"(?<=\$)\d+"); var BookSplit = Regex.Match(input, @"[^\$]*"); Booktxt.Text = BookSplit.ToString(); Pricetxt.Text = PriceSplit.ToString(); //Item Adder int row = 0; POSDGV.Rows.Add(); row = POSDGV.Rows.Count - 1; POSDGV["BookName", row].Value = Booktxt.Text; POSDGV["Price", row].Value = Pricetxt.Text; POSDGV["Amount", row].Value = 1; //Calculation foreach (DataGridViewRow Column in POSDGV.Rows) { for (int i = 0; i < POSDGV.Rows.Count; ++i) { if (POSDGV.Rows[i].Cells[2].Value == null) { Column.Cells[POSDGV.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[POSDGV.Columns["Amount"].Index].Value)); } else { Column.Cells[POSDGV.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[POSDGV.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[POSDGV.Columns["Discount"].Index].Value)) * Convert.ToDouble(Column.Cells[POSDGV.Columns["Amount"].Index].Value); } } } int buffer = 0; buffer = POSDGV.Rows.Count - 1; POSDGV["Discount", buffer].Value = 1; //GST, Subtotal and total decimal sum = 0; for (int i = 0; i < POSDGV.Rows.Count; ++i) { sum += Convert.ToDecimal(POSDGV.Rows[i].Cells[3].Value); } lblSub.Text = sum.ToString("c2"); var GST = sum * 0.10m; lblGST.Text = GST.ToString("c2"); lblTotal.Text = (sum + GST).ToString("c2"); Booktxt.Clear(); Pricetxt.Clear(); Arraytxt.Clear(); } }
Gerry Schmitz
Для обновления "одной" строки вы делаете много "циклов строк".
(И ссылка на "строку" DGV в качестве столбца тоже не помогает делу)