C #: создать второй идентификатор для элемента списка - PullRequest
0 голосов
/ 27 февраля 2019

Я кодирую систему отчетности.Все основные переменные из отчетов хранятся в одном файле .xml, а затем некоторые из этих же данных сохраняются в других папках в виде файлов .txt с одним словом, которые сохраняются под тем же именем, что и основной файл .xml отчетов.

Когда дело доходит до загрузки всех отчетов в список, в котором их отображаемые имена изменяются в соответствии с фильтром (Все | Новые | Самые старые | Приоритетные | 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);
        }
    }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Что вы можете сделать, это связать список с вашей коллекцией элементов, а затем установить, какое свойство в коллекции должно быть отображаемым, а какое должно быть «ключом».

  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 и Path или что-то еще, и добавить вместо этого (так как .Add принимает объект).Затем скажите ему, какое свойство отображать, а какое - значение для поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...