簡體   English   中英

ListView選定的項目到TextBox

[英]ListView selected item to TextBox

首先,我用xml文件中的數據填充了一個列表對象。 之后,我用必要的字段填充了ListView ,沒有任何問題。 如何從選定的ListView項獲取索引,然后為某些文本框提供適當的值?

這是它的代碼:

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文檔本身中獲取。

將您的task ID存儲在商品的Tag屬性中:

row.Tag = task.id;

然后處理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
    }

}

您還應該在類級別的Form_Load之外定義taskList ,否則您將無法從SelectedIndexChanged事件訪問它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM