Как я могу преобразовать объект из выпадающего списка в строку - PullRequest
1 голос
/ 27 июля 2011

Это все в WINDOWS FORM C #, MICROSOFT VISUAL STUDIO 2008

У меня есть поле со списком, которое отображается следующим образом:

private void populateCombos()
    {
        string GetConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\Data\\Db\\Comp.mdb";
        string queryString = "SELECT DISTINCT DC FROM Comp";
        OleDbDataAdapter dA = new OleDbDataAdapter(queryString, GetConn1);
        DataTable dC = new DataTable();
        dA.Fill(dC);
        comboBoxDC.DataSource = dC;
        comboBoxDC.DisplayMember = "DC";

        string GetConn2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\Data\\Db\\Comp.mdb";
        string queryString2 = "SELECT DISTINCT PL FROM Comp";
        OleDbDataAdapter dA2 = new OleDbDataAdapter(queryString2, GetConn2);
        DataTable pL = new DataTable();
        dA2.Fill(pL);
        comboBoxPL.DataSource = pL;
        comboBoxPL.DisplayMember = "PL";
    }

У меня возникли проблемы, связанные с тем, что я не могу превратить выбранный элемент в строку:

        object da = comboBoxDC.SelectedItem;
        object pr = comboBoxPL.SelectedItem;
        Console.WriteLine(da.ToString());

        Console.WriteLine(da);
        Console.WriteLine(pr);
        //Connection...

        var list = new List<dataQuery>();
        string GetConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\Data\\Db\\Comp.mdb";
        string connectionString = GetConnectionString;
        string queryString = "SELECT DC, PL, CompID, User, Email FROM Comp WHERE DC = \'" + da + "\' AND PL = \'" + pr + "\'";

И для того, чтобы я мог запросить эти команды, мне нужно, чтобы выбранный элемент comboBoxDC был строкой и таким же для comboBoxPL.

ОТВЕТ !!!!!!!:

Итак, я выяснил это:

код:

string da = comboBoxDC.Text.ToString();

string pr = comboBoxPL.Text.ToString();

Console.WriteLine(da)

Console.WriteLine(pr)

вывод выполнен успешно с text.tostring и фактически является строкой.

Ответы [ 5 ]

3 голосов
/ 27 июля 2011
MessageBox.Show(comboBoxDC.SelectedItem.ToString());

Отлично работает на моих решениях WPF.

2 голосов
/ 27 июля 2011

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

String str = ((DataRowView)comboBox1.SelectedItem)["ColumnName"].ToString();
0 голосов
/ 27 июля 2011

Предполагая, что это в WinForms, я предполагаю, что когда вы вызываете comboBoxDC.SelectedItem, результатом является "System.Data.DataRowView".Проблема с вашим кодом в том, что вы устанавливаете только DisplayMember.Если вы не задаете свойство ValueMember, значением по умолчанию для выбора ComboBox является DataRowView, если вашим источником данных является DataTable (или DataView).

Чтобы получить искомые данные, измените свой кодкак пример ниже.

РЕДАКТИРОВАТЬ Извините, мой метод будет работать, предполагая, что ваши поля являются текстовыми объектами.Если это не так (т. Е. Десятичные числа, целые числа и т. Д.), Вам необходимо сначала привести их к соответствующим им типам данных, а затем вызвать ToString () для результата.

Если вы установите ValueMember для полявнутри вашего объекта данных это будет не DataRowView, а указанное поле.Если вы все еще получаете «System.Data.DataRowView» в качестве строкового результата, то в вашем коде есть другая ошибка.Пожалуйста, обновите ваш вопрос, и я помогу вам найти его.

    private void populateCombos()
    {
    string GetConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\Data\\Db\\Comp.mdb";
    string queryString = "SELECT DISTINCT DC FROM Comp";
    OleDbDataAdapter dA = new OleDbDataAdapter(queryString, GetConn1);
    DataTable dC = new DataTable();
    dA.Fill(dC);
    comboBoxDC.DataSource = dC;
    comboBoxDC.DisplayMember = "DC";
    comboBoxDC.ValueMember = "DC"; //Add this line.

    string GetConn2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\Data\\Db\\Comp.mdb";
    string queryString2 = "SELECT DISTINCT PL FROM Comp";
    OleDbDataAdapter dA2 = new OleDbDataAdapter(queryString2, GetConn2);
    DataTable pL = new DataTable();
    dA2.Fill(pL);
    comboBoxPL.DataSource = pL;
    comboBoxPL.DisplayMember = "PL";
    comboBoxPL.ValueMember = "PL"; //Add this line, too.
}

Теперь измените код, который получает текстовое значение, следующим образом:

    string sDa = comboBoxDC.SelectedValue.ToString(); //Do this if this is a string column
    string sPr = comboBoxPL.SelectedValue.ToString(); // ''   ''    ''   ''   ''

    //If your data is not strings, cast them to their respective types

    Console.WriteLine(da.ToString());

    Console.WriteLine(sDa);
    Console.WriteLine(sPr);
0 голосов
/ 27 июля 2011

Вы можете вызвать метод toString для SelectedItem.От MSDN,

Object selectedItem = comboBox1.SelectedItem;

MessageBox.Show("Selected Item Text: " + selectedItem.ToString());
0 голосов
/ 27 июля 2011

SelectedItem представлен в виде строки, но вы привели его к объекту.Попробуйте заменить назначение на:

string da = comboBoxDC.SelectedItem;
string pr = comboBoxPL.SelectedItem;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...