C#如何将ListView中的选定项与真实对象关联起来?
我正在努力从列表视图中的选定项转到它所表示的真实对象。为了让问题保持简单,我有几件事: 自制类的两个对象列表C#如何将ListView中的选定项与真实对象关联起来?,c#,winforms,list,listview,C#,Winforms,List,Listview,我正在努力从列表视图中的选定项转到它所表示的真实对象。为了让问题保持简单,我有几件事: 自制类的两个对象列表personaje: public List<personaje> nuevosDeudores = new List<personaje>(); public List<personaje> deudores = new List<personaje>(); 如您所见,我找到了一种从一个列表中删除personaje对象的方法,但我不
personaje
:
public List<personaje> nuevosDeudores = new List<personaje>();
public List<personaje> deudores = new List<personaje>();
如您所见,我找到了一种从一个列表中删除personaje
对象的方法,但我不知道如何将其添加到另一个列表中。我只有糟糕的ListViewItem引用,我不知道如何直接“谈论它”,可以这么说:)
编辑:
我在填充两个列表的地方添加代码
deudores.Add(new personaje("Dimitri", 1));
deudores[0].seLeDebe = 5000;
deudores[0].paciencia = 4;
deudores.Add(new personaje("Marcelo", 1));
deudores[1].seLeDebe = 2500;
deudores[1].paciencia = 10;
nuevosDeudores.Add(new personaje("Pascuale", 1));
nuevosDeudores[0].oferta = 3000;
nuevosDeudores[0].paciencia = 10;
nuevosDeudores.Add(new personaje("Señor Anselmo", 1));
nuevosDeudores[1].oferta = 6000;
nuevosDeudores[1].paciencia = 7;
nuevosDeudores.Add(new personaje("Snatch", 1));
nuevosDeudores[2].oferta = 2000;
nuevosDeudores[2].paciencia = 5;
下面是我用来填充ListView的代码
private void PopularListview()
{
listView1.Items.Clear();
int cuenta = 0;
ListViewItem[] item = new ListViewItem[20];
foreach (personaje deudor in jugador.deudores)
{
string paciencia = "";
for (int i = 0; i < deudor.paciencia / 2; i++) paciencia += "|";
string[] row = { deudor.identificador.ToString(), deudor.nombre, deudor.seLeDebe.ToString(), paciencia };
item[cuenta] = new ListViewItem(row);
listView1.Items.Add(item[cuenta]);
cuenta++;
}
}
private void PopularListview()
{
listView1.Items.Clear();
int-cuenta=0;
ListViewItem[]项=新ListViewItem[20];
foreach(jugador.deudores中的Deudore人)
{
字符串paciencia=“”;
对于(int i=0;i
您没有声明任何内容,我假设您使用Windows窗体
每个ListViewItem都有一个可用于此场景的
创建ListViewItems时,将对象放入该标记中。当用户选择ListViewItem时,查看它的标记以获取放置在其中的对象:
jugador.deudores.Add(item.Tag as personaje);
编辑:
插入ListView时,添加一行设置每个项目的标记:
item[cuenta] = new ListViewItem(row);
item[cuenta].Tag = deudor;
listView1.Items.Add(item[cuenta]);
我猜在从一个列表添加到另一个列表时遇到了问题,这是相同类型的。如果是,请尝试以下代码,替换
If
内的第二行
jugador.deudores.AddRange(nuevosDeudores.Where(x => x.identificador == Convert.ToInt32(listView1.SelectedItems[0].SubItems[0].Text)));
获取所选人员id。然后您将能够从列表中获取人员,并以任何方式操作列表:
private void button3_Click(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count == 1)
{
ListViewItem item = listView1.SelectedItems[0];
int id = Convert.ToInt32(item.SubItems[0].Text);
var personaje = jugador.nuevosDeudores.First(x => x.identificador == id);
listView1.Items.Remove(item); // remove from ListView
jugador.nuevosDeudores.Remove(personaje); // remove from List
jugador.deudores.Add(personaje); // add to another List
// Create and add ListViewItem to listView2
}
}
是的,对不起,这是VS2010中的Windows窗体。你能用我提供的代码键入一个代码示例吗?你从来没有提供将项目放入列表的部分,因此,在你发布更多代码之前,这部分是不可能完成的。我认为这与问题无关,希望问题保持简单。我用代码编辑了我的问题now@CarlesAlcolea请看一看。旁注:如果你的代码不使用国家语言,那么互联网上的人或开发人员将更容易帮助你。尝试英语类和变量名。现在,我用stackoverflow写问题的时间占搜索/阅读时间的0.001%,但我会记住英语:)一个问题的三种解决方案,我会全部尝试。非常感谢。
private void button3_Click(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count == 1)
{
ListViewItem item = listView1.SelectedItems[0];
int id = Convert.ToInt32(item.SubItems[0].Text);
var personaje = jugador.nuevosDeudores.First(x => x.identificador == id);
listView1.Items.Remove(item); // remove from ListView
jugador.nuevosDeudores.Remove(personaje); // remove from List
jugador.deudores.Add(personaje); // add to another List
// Create and add ListViewItem to listView2
}
}