C#:为ListBox项目创建第二个标识符



我一直在编码报告系统。来自报告的所有主要变量都存储在一个.xml文件中,然后将其中一些数据存储在其他文件夹中,与单个word .txt文件,这些文件以与Reports Main .xml文件相同的名称保存。/p>

将所有报告加载到列表框中时,其显示名称根据过滤器更改(全部|最新|最新|最古老的| pirstity | a -z | z -a),但是可能会有更多它可以完美地显示和分类列表框项目,在将报告加载到加载程序中时,我已经编码了所选列表框项目的目录。

最初,当我制作此功能时,它们都是由文件的名称列出的,显然工作正常,因为文件名是由listbox项目的显示名称使用的。现在,由于我将其更清洁,包括过滤器,因此我无法完全使用相同的技术,因此我在想是否有一种方法可以在列表框项目中添加第二个标识符,以便我可以将第二个标识符称为名称在文件中,其数据存储在其中,以便我可以通过第二个标识符或任何其他具有相同结果的方式加载数据。

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);
        }
    }
}

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

  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和路径或其他的新对象,然后添加(因为.Add采用对象)。然后告诉它要显示哪个属性,哪个是查找的值。

最新更新