Итак, для некоторого контекста:
Моя основная форма 'frmMenu' действует как форма меню домашнего интерфейса, которая имеет панель, которая закрепляет несколько других дочерних форм в контейнере MDI, и боковые кнопки для переключения между дочерними формами. Моя основная дочерняя форма 'frmEquipment' имеет Listview 'lstBasket', который действует как корзина, заполненная всем, что клиент хочет купить.
В форме «frmEquipment» вы можете выбрать нужный элемент, и при выборе элемента откроется новая форма «frmEquipmentWindow», которая отображает дополнительную информацию об элементе вместе с изображением. Здесь они выбирают, сколько товара они хотят, и после подтверждения оно отправляется обратно в список, где соответственно добавляются имя, количество и цена.
Примечание: перед добавлением элемента необходимо проверить, не существует ли элемент в lstBasket, чтобы предотвратить столкновения с количествами. Рядом с 'lstBasket' есть метка 'lblPrice', и каждый раз, когда новый элемент добавляется или изменяется, он обновляется с ценой корзины
Код работает хорошо, и мои функции для изменения количества, добавления новых элементов, пустых элементов работают без сбоев. Так что проблема не в том, как я добавляю или меняю элементы в lstBasket.
Позвольте мне объяснить, где возникает проблема:
Если я изменю, какую дочернюю форму я использую в 'frmMenu', скажем 'frmAdmin', а затем вернусь к 'frmEquipment'; когда я пытаюсь добавить элемент снова, все это подтверждается как обычно, и «frmEquipmentWindow» закрывается (что означает, что он добавлен в «lstBasket»), но «lstBasket» не отображает никаких данных.
Несмотря на то, что никакие данные не отображаются, если я попытаюсь добавить тот же элемент, появится моя проверка, сообщающая, что элемент уже находится в 'lstBasket', и не позволит мне добавить его. Тем не менее, «lblPrice», по-видимому, не обновляется и остается на £ 0,00 ???
Я видел, как другие люди говорили, что у них были проблемы с View.Details, не показывающими данные, но я не нашел ни одного решения этой проблемы в нескольких постах. Я выложу столько кода, сколько считаю нужным, но, пожалуйста, спросите, хотите ли вы увидеть больше.
//The code from frmEquipmentWindow that updates the ListView
frmEquipment form = (frmEquipment)Application.OpenForms["frmEquipment"];
if (form.lstBasket.Items.Count != 0)
{
for (int i = 0; i < form.lstBasket.Items.Count; i++)
{
string shortName = form.lstBasket.Items[i].SubItems[0].Text;
if (shortName == lblBrand.Text + " " + lblName.Tag.ToString())
{
MessageBox.Show("You already have that item in the basket");
basketCheck = true;
return;
}
}
}
if (basketCheck == false)
{
DialogResult answer;
double totalPrice = itemPrice * temp;
answer = MessageBox.Show("The total price is £" + totalPrice.ToString("0.00") + " for [" + temp + "] " + lblName.Text, "Are you sure you want to add this to your basket?", MessageBoxButtons.OKCancel, MessageBoxIcon.None);
if (answer == DialogResult.OK)
{
form.lstBasket.Items.Add(lblBrand.Text + " " + lblName.Tag.ToString());
form.lstBasket.Items[form.lstBasket.Items.Count - 1].SubItems.Add(temp.ToString());
if (priceCheck)
{
form.lstBasket.Items[form.lstBasket.Items.Count - 1].SubItems.Add("£" + totalPrice.ToString());
}
else
{
form.lstBasket.Items[form.lstBasket.Items.Count - 1].SubItems.Add("£" + totalPrice.ToString() + ".00");
}
form.lstBasket.View = View.Details;
form.updateBasketPrice();
GlobalVariables.itemsInBasket = true;
this.Close();
return;
}
else
{
return;
}
}
Я не объявляю ListView в коде, но он генерируется в классе Designer для формы:
//
// lstBasket
//
this.lstBasket.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmN,
this.clmQ,
this.clmP});
this.lstBasket.FullRowSelect = true;
this.lstBasket.Location = new System.Drawing.Point(739, 117);
this.lstBasket.MultiSelect = false;
this.lstBasket.Name = "lstBasket";
this.lstBasket.Size = new System.Drawing.Size(303, 379);
this.lstBasket.TabIndex = 5;
this.lstBasket.UseCompatibleStateImageBehavior = false;
this.lstBasket.View = System.Windows.Forms.View.Details;
this.lstBasket.SelectedIndexChanged += new System.EventHandler(this.lstBasket_SelectedIndexChanged);
//
// clmN
//
this.clmN.Text = "Name";
this.clmN.Width = 156;
//
// clmQ
//
this.clmQ.Text = "Quantity";
this.clmQ.Width = 65;
//
// clmP
//
this.clmP.Text = "Price";
this.clmP.Width = 85;