所以,我一直在学校项目中工作,我需要动态地创建和添加东西到listview,第一次添加没有任何问题,但是当它即将添加第二个时它会崩溃。
这是代码:
lvwCarros.Columns.Clear();
ListViewItem lvi = new ListViewItem();
int idx, idx2;
lvwCarros.Columns.Add("Carro", 80, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Ano", 60, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Stand", 60, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Localização do Stand", 120, HorizontalAlignment.Center);
for (idx = 0; idx < Program.Carros.Count ; idx++)
{
lvi.Text = Program.Carros[idx].Marca + " " + Program.Carros[idx].Modelo;
for (idx2 = 0; idx2 < Program.Matriculas.Count ; idx2++)
{
if (Program.Carros[idx].Matricula == Program.Matriculas[idx2].ID_Matricula)
{
lvi.SubItems.Add(Program.Matriculas[idx2].Ano_Emissão.ToString());
for (int idx3 = 0; idx3 < Program.Stands.Count; idx3++)
{
if (Program.Carros[idx].Proprietario == Program.Stands[idx3].ID_Stand)
{
lvi.SubItems.Add(Program.Stands[idx3].Nome_Stand);
lvi.SubItems.Add(Program.Stands[idx3].Local_Stand);
}
lvwCarros.Items.Add(lvi);
}
}
}
}
lvwCarros.Visible = true;
lvwCarros.Enabled = true;
非常感谢您提前:))
答案 0 :(得分:0)
基本上你的问题是每次调用lvwCarros.Items.Add()时你的lvi都需要成为一个新对象。尝试使用“lvi = new ListViewItem(first subitem);”在那里最里面的循环顶部。您只能将每个ListViewItem对象添加到ListView一次 - 这就是您获得异常的原因。
答案 1 :(得分:0)
这是正在运行的代码。这段代码有两个问题:
每个要添加的List项都应该在for循环中实例化,因为它会创建一个新项。否则,您将一次又一次地添加相同的项目并修改所有项目的值,如果一个项目被更改,因为它们将指向相同的项目。因此,如果要创建不同的列表视图项,请在for循环中移动行ListViewItem lvi = new ListViewItem();
。
您正在内部for循环中添加listview项lvi
,这会导致它多次添加每个listitem。这就是为什么你得到错误。将此行移到最外面的for循环中,错误就会消失。
lvwCarros.Columns.Clear();
int idx, idx2;
lvwCarros.Columns.Add("Carro", 80, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Ano", 60, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Stand", 60, HorizontalAlignment.Center);
lvwCarros.Columns.Add("Localização do Stand", 120, HorizontalAlignment.Center);
for (idx = 0; idx < Program.Carros.Count ; idx++)
{
/* You should initiate a new item in the loop if you want to add more*/
ListViewItem lvi = new ListViewItem();
lvi.Text = Program.Carros[idx].Marca + " " + Program.Carros[idx].Modelo;
for (idx2 = 0; idx2 < Program.Matriculas.Count ; idx2++)
{
if (Program.Carros[idx].Matricula == Program.Matriculas[idx2].ID_Matricula)
{
lvi.SubItems.Add(Program.Matriculas[idx2].Ano_Emissão.ToString());
for (int idx3 = 0; idx3 < Program.Stands.Count; idx3++)
{
if (Program.Carros[idx].Proprietario == Program.Stands[idx3].ID_Stand)
{
lvi.SubItems.Add(Program.Stands[idx3].Nome_Stand);
lvi.SubItems.Add(Program.Stands[idx3].Local_Stand);
}
}
}
}
/*Moving it to outermost for loop*/
lvwCarros.Items.Add(lvi);
}
lvwCarros.Visible = true;
lvwCarros.Enabled = true;