2014-01-06 3 views
-1

Я изо всех сил пытаюсь перейти от выбранного элемента в виде списка к реальному объекту, который он представляет. Чтобы сохранить этот вопрос просто, у меня есть несколько вещей:C# Как связать выбранный элемент в ListView с реальным объектом?

Два списков объектов домашнего класса personaje:

public List<personaje> nuevosDeudores = new List<personaje>(); 

public List<personaje> deudores = new List<personaje>(); 

Теперь у меня есть ListView, который показывает nuevosDeudores, и я хочу, чтобы выбрать один пункт и нажмите button3, чтобы удалить его из этого списка и добавить его в список deudores.

private void button3_Click(object sender, EventArgs e) 
    { 
     if (listView1.SelectedIndices.Count == 1) 
     { 
      ListViewItem item = listView1.SelectedItems[0]; 
      jugador.deudores.Add(***i need to put the "personaje" object reference here***); 
      jugador.nuevosDeudores.RemoveAll(x => x.identificador == Convert.ToInt32(listView1.SelectedItems[0].SubItems[0].Text)); 
      listView1.Items.Remove(item); 
     } 
    } 

Как вы можете видеть, я нашел способ, чтобы удалить personaje объект из одного списка, но я не знаю, как добавить его в другой список. У меня есть только паршивую ссылка ListViewItem, я не знаю, как непосредственно «об этом говорить» так что, говорят :)

EDIT: добавить код, где я заполнить два списка

 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++; 
     } 
    } 
+0

Три решения для одной проблемы, я попробую их все. Спасибо! –

ответ

1

Вы ничего не заявили, я буду считать Windows Forms.

Каждый ListViewItem имеет Tag, которые могут использоваться именно для этого сценария.

При создании своих элементов ListViewItems поместите свой объект в этот тег. Когда пользователь выбирает ListViewItem, смотреть в это тег, чтобы получить объект, который вы положили:

jugador.deudores.Add(item.Tag as personaje); 

Edit:

При вставке в ListView, добавьте строку, которая устанавливает метку каждого элемента :

 item[cuenta] = new ListViewItem(row); 
     item[cuenta].Tag = deudor; 
     listView1.Items.Add(item[cuenta]); 
+0

Да, извините, это Windows Forms в VS 2010. Не могли бы вы ввести пример кода с кодом, который я предоставил? –

+0

Вы никогда не предоставляли ту часть, где вы помещаете свои предметы в список, чтобы часть была невозможна, пока вы не разместите больше кода. – nvoigt

+0

Я думал, что это не имеет значения, и хотел, чтобы вопрос был простым. Я отредактировал мой вопрос с кодом сейчас –

0

У меня возникли проблемы при добавлении из одного списка в другой, который имеет тот же тип. Если да, попробуйте приведенный ниже код, заменив вторую строку внутри if.

jugador.deudores.AddRange(nuevosDeudores.Where(x => x.identificador == Convert.ToInt32(listView1.SelectedItems[0].SubItems[0].Text))); 
0

Получить выбранное лицо 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 
    } 
} 
Смежные вопросы