2014-02-02 4 views
0

Во-первых, я заполнил объект списка данными из XML-файла. После этого я заполнил ListView необходимыми полями без каких-либо проблем. Как я могу получить индекс из выбранного элемента ListView, а затем дать соответствующее значение для некоторого текстового поля?ListView выбранный элемент в TextBox

Это код для него:

private void Form1_Load(object sender, EventArgs e) 
{ 

    List<Tasks> taskList = new List<Tasks>(); 

    listView1.Columns.Add("Date:"); 
    listView1.Columns.Add("Job:"); 
    listView1.Columns.Add("Client Name"); 
    listView1.Columns.Add("Submitted by"); 

    taskList = getTasks(); 

    listView1.Items.Clear(); 

    for (int i = 0; i < taskList.Count; i++) 
    { 
     Tasks task = taskList.ElementAt(i); 

     ListViewItem row = new ListViewItem(); 
     row.Text=task.date.ToString(); 
     row.SubItems.Add(task.job); 
     row.SubItems.Add(task.clientName); 
     row.SubItems.Add(task.submittedBy); 

     listView1.Items.Add(row); 
    } 
} 

public List<Tasks> getTasks() 
{ 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load("data.xml"); 

    XmlNodeList nodes = xmlDoc.DocumentElement.SelectNodes("/tasks/task"); 

    List<Tasks> taskList = new List<Tasks>(); 

    foreach (XmlNode node in nodes) 
    { 
     Tasks task = new Tasks(); 
     task.id = Convert.ToInt32(node.SelectSingleNode("id").InnerText); 
     task.date = Convert.ToDateTime(node.SelectSingleNode("submittedDate").InnerText); 
     task.submittedBy = node.SelectSingleNode("submittedBy").InnerText; 
     task.clientName = node.SelectSingleNode("clientName").InnerText; 
     task.job = node.SelectSingleNode("job").InnerText; 
     task.taskCategory = node.SelectSingleNode("taskCategory").InnerText; 
     task.taskDescription = node.SelectSingleNode("taskDescription").InnerText; 
     task.hours = node.SelectSingleNode("hours").InnerText; 
     task.status = node.SelectSingleNode("status").InnerText; 
     task.isBilled = node.SelectSingleNode("isBilled").InnerText; 
     task.cost = node.SelectSingleNode("cost").InnerText; 
     task.followUpInfo = node.SelectSingleNode("followUpInfo").InnerText; 
     task.invoiceNumber = node.SelectSingleNode("quickBooksInvoiceNo").InnerText; 

     taskList.Add(task); 
    } 

    return taskList; 
} 

private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 

} 

Что мне нужно теперь, как, когда я нажимаю элемент из listView1, чтобы показать какое-то значение в текстовом поле? Но это значение должно быть взято из объекта списка taskList, а не из самого документа xml.

ответ

0

магазин ваш task ID внутри вашего элемента Tag собственности:

Затем обработать ListView.SelectedIndexChanged событие

private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (listView1.SelectedItems.Count > 0) 
    { 
     var id = (int) listView1.SelectedItems[0].Tag; 
     var currenTask = taskList.Where(t => t.id == id).First(); 
     textBox1.Text = currenTask.taskDescription; // for example 
    } 

} 

Также вы должны определить свой taskList на уровне класса, за пределами вашего method.Otherwise вы не можете получить к нему доступ от SelectedIndexChanged события.

List<Tasks> taskList = new List<Tasks>(); 
private void Form1_Load(object sender, EventArgs e) 
{ 
    ... 
} 
+0

Что мне нужно, чтобы показать, как-то к SelectedIndexChanged, что есть где-то в коде TaskList .... Я попытался с частной недействительным (отправитель объекта, EventArgs е, список TaskList) listView1_SelectedIndexChanged но никакого успеха. Я также добавил идентификатор в строке ListViewItem = new ListViewItem() .... – user2962759

+0

просто делайте то, что я сказал.define это вне метода загрузки формы. Не добавляйте дополнительный столбец, просто используйте свойство тега –

+0

Когда я нажимаю внутри списка item, он даже не входит в метод listView1_selectedIndexChange – user2962759

Смежные вопросы