C#:为列表框项创建第二个标识符

问题描述 投票:0回答:1

我一直在编写报告系统。报告中的所有主要变量都存储在单个.xml文件中,然后一些相同的数据作为单个.txt文件存储在其他文件夹中,这些文件以与报告main .xml文件相同的名称保存。

在将所有报告加载到列表框中时,根据过滤器(All | Newest | Oldest | Priority | A - Z | Z - A)更改其显示名称,并且可能会有更多,但是尽管它显示和对列表框项目进行完全排序,当涉及到将报告加载到加载器中时,我编码它需要所选列表框项目的目录。

最初当我这样做时,他们都被文件名列出来,这显然工作得很好,因为文件名是由列表框项的显示名称使用的。现在因为我使它更清洁并包含过滤器,我不能完全使用相同的技术,所以我在想是否有办法向列表框项添加第二个标识符,以便我可以调用第二个标识符的名称其数据存储在其中的文件,以便我可以通过第二个标识符或任何其他具有相同结果的方式加载数据。

public void UpdateReports()
{
    if (ReportsPrioritySelection.Text == "All")
    {
        ReportsList.Items.Clear();

        SortDescription sd = new SortDescription("", ListSortDirection.Descending);

        DirectoryInfo dinfo = new DirectoryInfo(@"Report&Fix\\Reports\\");
        FileInfo[] Files = dinfo.GetFiles("*.xml");
        foreach (FileInfo file in Files)
        {
            ReportsList.Items.Add(Path.GetFileNameWithoutExtension(file.Name));
            ReportsList.Items.SortDescriptions.Add(sd);
        }
    }

    if (ReportsPrioritySelection.Text == "Newest")
    {
        ReportsList.Items.Clear();

        SortDescription sd = new SortDescription("", ListSortDirection.Descending);

        DirectoryInfo dinfo = new DirectoryInfo(@"Report&Fix\\Reports\\");
        FileInfo[] Files = dinfo.GetFiles("*.xml");
        foreach (FileInfo file in Files)
        {
            ReportsList.Items.Add(File.ReadAllText(@"Report&Fix\\ReportData\\Date\\" + Path.GetFileNameWithoutExtension(file.Name) + ".txt") + " " + Path.GetFileNameWithoutExtension(file.Name));
            ReportsList.Items.SortDescriptions.Add(sd);
        }
    }
}
c# .net listbox listboxitem
1个回答
1
投票

你可以做的是将列表绑定到你的项目集合,然后设置集合中的哪个属性应该是显示属性,哪个应该是'key'。

  var myItems = new List<SomeItem>() 
  {
    new SomeItem() { Id = 1, Name = "File1.txt" }, 
    new SomeItem() { Id = 2, Name = "File2.txt" }, 
    new SomeItem() { Id = 3, Name = "File3.txt" } 
  };

  ReportsList.DataSource = myItems;

  ReportsList.DisplayMember = "Name";

  ReportsList.ValueMember = "Id";
}

然后,当您引用ListItem时,您可以执行.ValueMember以获取用于您的唯一引用的Id。

因此,在您的情况下,您应该创建一个具有两个属性Id和Path或其他属性的新对象,而不是仅添加路径的字符串,而是添加(因为.Add接受一个Object)。然后告诉它要显示哪个属性以及查找的值。

© www.soinside.com 2019 - 2024. All rights reserved.