如何通过在另一个ListView中选择一个项目来显示ListView中的元素



我正在处理一个C#项目,我有两个ListView和两个类(Bicycle和User(,它们有一个共同的属性(Id(。我在第一个ListView中显示了自行车,现在我想通过选择自行车在第二个ListView显示用户。因此,如果所选自行车的Id为1,我想向用户显示Id为1的自行车。这是我尝试过的,但它只显示一个id为1的用户,而不是两个。

public partial class Form1 : Form
{
private List<Bicycle> IstBicycles;
private List<User> IstUsers;
public Form1()
{
InitializeComponent();
IstBicycles = new List<Bicycle>();
IstUsers = new List<User>();

}

public void showBicycles()
{

lvBicycles.Items.Clear();
foreach(Bicycle bicycle in IstBicycles)
{
ListViewItem listViewItem = new ListViewItem(bicycle.IDb.ToString());
listViewItem.SubItems.Add(bicycle.Name);
listViewItem.SubItems.Add(bicycle.Km.ToString());
listViewItem.Tag = bicycle;
lvBicycles.Items.Add(listViewItem);
}
}
private void btn1_Click(object sender, EventArgs e)
{
Bicycle bicycle1 = new Bicycle(1, "Pegas", 200);
Bicycle bicycle2 = new Bicycle(2, "BMX", 300);
IstBicycles.Add(bicycle1);
IstBicycles.Add(bicycle2);
showBicycles();
}

private void lvBicycles_DoubleClick(object sender, EventArgs e)
{
User user1 = new User("Mary", 1, 30);
User user2 = new User("Dan", 2, 40);
User user3 = new User("Mike", 1, 10);
IstUsers.Add(user1);
IstUsers.Add(user2);
IstUsers.Add(user3);

if (lvBicycles.SelectedItems.Count == 0)
{
MessageBox.Show("Select a bicycle!");
return;
}
ListViewItem listViewItem = lvBicycles.SelectedItems[0];
Bicycle bicycle = (Bicycle)listViewItem.Tag;

foreach (User user in IstUsers)
{
if (bicycle.IDb.ToString() == user.ID.ToString())
{
lvUsers.Items.Clear();
ListViewItem listViewItem1 = new ListViewItem(user.Name);
listViewItem1.SubItems.Add(user.ID.ToString());
listViewItem1.SubItems.Add(user.Duration.ToString());
listViewItem1.Tag = user;
lvUsers.Items.Add(listViewItem1);
}
}


}
}
public class Bicycle
{
private readonly int idb;
private string name;
private int km;
public string Name { get => name; set => name = value; }
public int IDb { get => idb; }
public int Km { get => km; set => km = value; }
public Bicycle(int idb, string name, int km)
{
this.idb = idb;
this.name = name;
this.km = km;
}
}
public class User
{
private string name;
private int id;
private int duration;
public string Name { get => name; set => name = value; }
public int Id { get => id; set => id = value; }
public int Duration { get => duration; set => duration = value; }
public User(string name, int id, int duration)
{
this.name = name;
this.id = id;
this.duration = duration;
}
}

您正在清除foreach循环中的用户ListView。将lvUsers.Items.Clear();移动到前臂上方,应该可以了。

这应该有效:

private void lvBicycles_DoubleClick(object sender, EventArgs e)
{
User user1 = new User("Mary", 1, 30);
User user2 = new User("Dan", 2, 40);
User user3 = new User("Mike", 1, 10);
IstUsers.Add(user1);
IstUsers.Add(user2);
IstUsers.Add(user3);
if (lvBicycles.SelectedItems.Count == 0)
{
MessageBox.Show("Select a bicycle!");
return;
}
ListViewItem listViewItem = lvBicycles.SelectedItems[0];
Bicycle bicycle = (Bicycle)listViewItem.Tag;
lvUsers.Items.Clear();
foreach (User user in IstUsers)
{
if (bicycle.IDb.ToString() == user.Id.ToString())
{                   
ListViewItem listViewItem1 = new ListViewItem(user.Name);
listViewItem1.SubItems.Add(user.Id.ToString());
listViewItem1.SubItems.Add(user.Duration.ToString());
listViewItem1.Tag = user;
lvUsers.Items.Add(listViewItem1);
}
}
}

}

最新更新