Elighne Ответов: 1

ComboBox ValueMember и DisplayMember без базы данных


Всем привет.

Мне немного трудно найти где-нибудь ответ на этот вопрос. обходной путь этот вопрос я задаю сам, продвигаясь дальше в своем коде, но в данный момент мне больше некуда идти дальше, если я его не решу, и вот вы меня достали, аксинг за помощью.

Я думаю, что простой ответ "Да/нет" может сделать меня счастливым, если нет ничего лучше. Но для этого, вероятно, я должен объяснить каждую частицу того, что я хочу:

У меня есть combobox, который я хочу, чтобы он был заполнен и отображал имена всех файлов в выбранном каталоге или многих других, но при выборе элемента в combobox он возвращает весь путь к файлу. Я чувствую, что должен объяснить больше функциональности combobox и/или программы, так что это оправдано, почему я не думаю, что использование базы данных-это хорошая идея, но это, вероятно, будет много бесполезных слов, поэтому я ограничусь тем, что скажу, что я не буду использовать базу данных, потому что это было бы слишком медленно для этой цели.

Затем, наконец, мой вопрос заключается в следующем: Есть ли более простой способ иметь элемент отображения и элемент значения внутри combobox без базы данных, строки подключения и т. д.?

Чтобы сделать это быстрее, у меня была такая идея кода, поэтому, если ответ будет отрицательным, а также ответ будет более простым и/или быстрым/оптимальным для кода, чем этот, я буду очень признателен за подсказку (и фрагмент кода).

Private ColPaths() As String
Private ColSelPath As String

Private Sub FillCboBox()

    For Each Str As String In Directory.GetFiles(InteractiveMap.GalleriesPath, _
                                                "*.lst", SearchOption.AllDirectories)

        cboCollection.Items.Add(Path.GetFileNameWithoutExtension(Str))
        ReDim Preserve ColPaths(cboCollection.Items.Count - 1)
        ColPaths(cboCollection.Items.Count - 1) = Str
    Next
End Sub

Private Sub cboCollection_SelectedIndexChanged(sender As Object, e As EventArgs) _
                                                Handles cboCollection.SelectedIndexChanged

    ColSelPath = ColPaths(cboCollection.SelectedIndex)
End Sub


Я должен добавить, что это только один из 3 различных comboboxes, которые я хочу заполнить и использовать с очень похожим методом, если только один из них не связан с содержимым текстового файла(легко редактируемого пользователем вручную, если это необходимо), а другой-с комбинацией файлов/путей и содержимым одного и того же типа редактируемых текстовых файлов, что является одной из многих причин того, почему база данных не будет работать для меня.

PS. Я новичок на этом сайте, поэтому пока не знаю, как здесь все работает, я предполагаю, что это похоже на другие форумы, но я видел некоторые разные и очень интересные вещи (например, рабочее пространство). Как бы то ни было, именно из-за этого я хочу спросить вас о "предварительном просмотре", показанном ниже здесь, в текстовом редакторе, я не вижу ничего, кроме прямоугольника оранжевой линии с "..." в нем.

Разве мой браузер (chrome) не подходит для работы здесь? это сайт? или что бы это могло быть? (извините, если этот вопрос не в правильном месте)

ПС2. Этот код находится в vb.net но я приветствую на C# ответы тоже.
Я работаю в VS2013 и в рамках этого проекта (из-за его простоты и того, что я хочу, чтобы он был очень совместим) его 2.0

Наконец, извините за мой ужасный английский и заранее благодарю вас.

Аslam Iqbal

Поле со списком.Значение Drawmode = Значение Drawmode.OwnerDrawFixed;
эта строка отвечает за отображение имени объекта вместо ожидаемого значения в combobox в моем случае.

1 Ответов

Рейтинг:
4

ZurdoDev

Чтобы использовать DataMember и ValueMember, вам не обязательно иметь базу данных, но вы должны иметь что-то вроде данных. Это означает, что вы можете использовать DataTable или другой класс привязки данных. Если вы загрузили свои файлы в datatable, то, скорее всего, в интернете есть примеры, которые вы могли бы сделать именно так.

Другой способ и, вероятно, более простой-это немного изменить свой код. От http://stackoverflow.com/questions/3063320/combobox-adding-text-and-value-to-an-item-no-binding-source[^], если это приложение Winforms, то вы можете сделать это таким образом. ASP.Net поле со списком может быть сделано другим способом.

Dictionary<string,>test = new Dictionary<string,>();
        test.Add("1", "dfdfdf");
        test.Add("2", "dfdfdf");
        test.Add("3", "dfdfdf");
        comboBox1.DataSource = new BindingSource(test, null);
        comboBox1.DisplayMember = "Value";
        comboBox1.ValueMember = "Key";

// Get combobox selection (in handler)
string value = ((KeyValuePair<string,>)comboBox1.SelectedItem).Value;


Elighne

Отлично, что приспособлены лучше для меня была одна на переполнение стека. Не знаю, почему я не наткнулся на него, когда гуглил.
У меня было искушение попробовать new horizons с DataTable, но это означало бы заполнить 2 элемента управления один из другого, а это не совсем быстрее во время выполнения при работе с более чем 1000 архивами или около того.
Большое спасибо.

ZurdoDev

Рад слышать, что у тебя получилось.