#flutter #dart
Вопрос:
Кнопка 1-10-это элементы; снимок экрана pos
коды, которые я использовал, но не работают, может быть, это неправильно, но я не могу найти ответы в Интернете
private void enterPayment_Click(object sender, EventArgs e)
{
label1.Text = "Payment";
//price.ReadOnly = false;
//price.Text = "0.00";
//price.Focus();
//Kukunin ko yung total ng List Items
double total = 0;
int ilan = orders.Items.Count;
for (int i = 0; i >= ilan; i )
{
string item = orders.Items[i].ToString();
int Index = item.IndexOf("@");
int Length = item.Length;
string presyoString = item.Substring(Index 1, Length - Index - 1);
double presyoDouble = double.Parse(presyoString);
total = presyoDouble;
//price.Text = (total ".00");
}
price.Text = (total ".00");
}
Комментарии:
1. Это похоже на представление списка. У каждого элемента есть
Tag
свойство. Вы можете хранитьdecimal
там значение. Если элементы не поступают из источника данных сортировки; в этом случае вы можете получить значение по индексу элемента.
Ответ №1:
Я настоятельно рекомендую использовать список только в качестве представления, а не для выполнения математической операции. Данные можно использовать в сборе, например в виде списка, чтобы вы могли лучше выполнять операции.
Например, при загрузке программы я добавлю информацию о продукте List<T>
в форму и в форму, я помещаю тег в кнопку, считающую его идентификатором продукта. Итак, когда я нажимаю на кнопку, она передает свойство тега, и оттуда я выполняю поиск информации о продукте в списке, касающейся моего идентификатора, добавляю в другой List<T>
файл и получаю его сумму.
public partial class Form1 : Form
{
private List<ProductDisplay> listProductDisplay = new List<ProductDisplay>();
private List<ProductInformation> listProductInfo = new List<ProductInformation>();
public Form1()
{
InitializeComponent();
LoadProduct();
}
private void LoadProduct()
{
listProductDisplay = new List<ProductDisplay>()
{
new ProductDisplay{ProdID = 1,ProdName = "Chargrilled Burger",ProdPrice = 330.00m},
new ProductDisplay{ProdID = 2,ProdName = "Mushroom N' Swish",ProdPrice = 330.00m},
new ProductDisplay{ProdID = 3,ProdName = "Chicken Burger",ProdPrice = 250.00m},
new ProductDisplay{ProdID = 4,ProdName = "Steak Loader",ProdPrice = 220.00m},
new ProductDisplay{ProdID = 5,ProdName = "Cookie Sandwich",ProdPrice = 125.00m},
new ProductDisplay{ProdID = 6,ProdName = "Cookie Sundae",ProdPrice = 175.00m},
new ProductDisplay{ProdID = 7,ProdName = "Chicken Nuggets",ProdPrice = 145.00m},
new ProductDisplay{ProdID = 8,ProdName = "Curly Fries",ProdPrice = 75.00m},
new ProductDisplay{ProdID = 9,ProdName = "Sprite",ProdPrice = 50.00m},
new ProductDisplay{ProdID = 10,ProdName = "Coke",ProdPrice = 50.00m}
};
}
private void InsertOrder_ButtonClick(object sender, EventArgs e)
{
try
{
Button btn = (Button)sender;
int number = Convert.ToInt32(btn.Tag);
var itemProduct = listProductDisplay.First(x => x.ProdID == number);
ProductInformation prod = new ProductInformation
{
ProdID = itemProduct.ProdID,
ProdName = itemProduct.ProdName,
ProdPrice = itemProduct.ProdPrice,
ProdQty = 1
};
prod.ProdDisplayName = $"{prod.ProdQty}x {prod.ProdName} @{prod.ProdPrice.ToString("F")} = {(prod.ProdPrice * prod.ProdQty).ToString("F")}";
listProductInfo.Add(prod);
listBoxItem.DataSource = null;
listBoxItem.DataSource = listProductInfo;
listBoxItem.DisplayMember = "ProdDisplayName";
listBoxItem.ValueMember = "ProdID";
var price = listProductInfo.Sum(t => (t.ProdPrice * t.ProdQty));
txtPayment.Text = price.ToString("F");
}
catch (Exception ex)
{
MessageBox.Show("Failed to insert order");
throw;
}
}
}
public class ProductDisplay
{
public int ProdID { get; set; }
public string ProdName { get; set; }
public decimal ProdPrice { get; set; }
}
public class ProductInformation
{
public int ProdID { get; set; }
public string ProdName { get; set; }
public string ProdDisplayName { get; set; }
public decimal ProdPrice { get; set; }
public int ProdQty { get; set; }
}
Комментарии:
1. Это гораздо лучший способ реализовать это.
Ответ №2:
Анализ и извлечение значений из подобной строки очень подвержены ошибкам и хрупки. Что произойдет, если порядок полей в вашей строке изменится? Или если вы добавите символы валюты?
Решение @Luiey-это самый разумный способ продвинуться вперед. Но если по какой-то причине вы не можете внести так много изменений в свой код, самый минимум, который вы хотите сделать, — это сохранить элементы в списке в виде пользовательского объекта со статически введенными полями для цены, количества и итога. Класс ListBox вызывает a ToString()
во время отображения элементов. Таким образом, вы можете легко переопределить этот метод, чтобы подготовить выходную строку в соответствии с вашими потребностями.
private class LineItem
{
public LineItem()
{
Quantity = 0;
Description = string.Empty;
Price = 0;
}
public int Quantity
{
get;
set;
}
public string Description
{
get;
set;
}
public int Price
{
get;
set;
}
public int Total
{
get
{
return Quantity * Price;
}
}
public override string ToString()
{
return $"{Quantity} × {Description} @ {Price} = {Total}";
}
}
Затем вы добавляете элемент в свой список следующим образом.
var item = new LineItem()
{
Quantity = 1,
Description = "Foo bar",
Price = 10
};
listBox1.Items.Add(item);
И сложите их вот так.
var items = listBox1.Items.Cast<LineItem>().ToArray();
var accumulator = 0;
accumulator = items.Aggregate(accumulator, (a, i) => a (i.Quantity * i.Price), (a) => a);