用户在列表视图中选择项目,并将文本文件中的数据显示为标签

时间:2017-05-01 16:19:11

标签: c# winforms listview dictionary

我正在尝试编写一个程序,其中包含listview,其中包含来自文本文件(4列中的名称,州,城市,邮政编码)的4列数据,以及当用户点击listview它将名称和电话号码(在文本文件中)显示为2个标签。 到目前为止,这是我的代码:

namespace VendorsDictionary
{
    public partial class VendorsDictionary : Form
    {
        public VendorsDictionary()
        {
            InitializeComponent();
        }
        private Dictionary<string,string> vendorPhones = new Dictionary<string,string>();

        private void VendorsDictionary_Load(object sender, EventArgs e)
        {
            string currentLine;
            string[] fields = new string[2];
            StreamReader vendorReader = new StreamReader("Vendor.txt");

            while (vendorReader.EndOfStream == false)
            {
                currentLine = vendorReader.ReadLine();
                fields = currentLine.Split(',');

                vendorPhones.Add(fields[1], fields[6]);

                string[] name = { fields[1] };
                string[] city = { fields[3] };
                string[] state = { fields[4] };
                string[] zipcode = { fields[5] };

                for (int i = 0; i < name.Length; i++)
                {
                    lvDisplay.Items.Add(new ListViewItem(new[] { name[i], city[i], state[i], zipcode[i] }));
                }

            }
            vendorReader.Close();
        }

        private void lvDisplay_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvDisplay.SelectedItems.Count>0)
            {
                ListViewItem item = lvDisplay.SelectedItems[0];
                lblName.Text = item.SubItems[0].Text;
                // lbPhone = ?
                // lblPhone.Text = item.SubItems[].Text; - does not work because phone number is not in the listview 
            }
            else
            {
                lblName.Text = string.Empty;
                lblPhone.Text = string.Empty;
            }
        }
    }
}

截至目前,我已将所有工作正常运行,但我无法弄清楚如何从文本文件中获取电话号码以显示到第二个标签中。要显示名称很容易,因为它位于listview,但我如何才能显示电话号码(文本文件的最后一列)?

1 个答案:

答案 0 :(得分:1)

您将供应商的电话号码存储在字典vendorPhones中。

我仍然不确定文件中存储的数据的格式和结构以及为name.length循环的原因。

如果我的假设是供应商名称是唯一的,您可以从字典中获取所选供应商的电话号码,如下所示。

private void lvDisplay_SelectedIndexChanged(object sender, EventArgs e)
{
    if (lvDisplay.SelectedItems.Count>0)
    {
        ListViewItem item = lvDisplay.SelectedItems[0];
        lblName.Text = item.SubItems[0].Text;
        lblPhone.Text = vendorPhones[item.SubItems[0].Text]; // Get the phone number from dictionary by using the vendor name.
    }
    else
    {
        lblName.Text = string.Empty;
        lblPhone.Text = string.Empty;
    }
}