如何将对象从组合框选定项目转换为字符串

时间:2011-07-27 13:00:51

标签: c# winforms

这一切都在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 个答案:

答案 0 :(得分:3)

MessageBox.Show(comboBoxDC.SelectedItem.ToString());

适用于我的WPF解决方案。

答案 1 :(得分:2)

您需要将selecteditem转换为特定类,然后转换为字符串。 在这种情况下,你已经使用combobox绑定数据表,以便以这种方式进行投射。

String str = ((DataRowView)comboBox1.SelectedItem)["ColumnName"].ToString();

答案 2 :(得分:0)

您可以在SelectedItem上调用toString方法。来自MSDN,

Object selectedItem = comboBox1.SelectedItem;

MessageBox.Show("Selected Item Text: " + selectedItem.ToString());

答案 3 :(得分:0)

假设这是在WinForms中,我的猜测是当你调用comboBoxDC.SelectedItem时,结果是“System.Data.DataRowView”。您的代码的问题是您只设置了DisplayMember。如果未设置ValueMember属性,则如果数据源是DataTable(或DataView),则ComboBox选择的默认值为DataRowView。

要获取您要查找的数据,请修改您的代码,如下例所示。

修改 道歉,我的方法会起作用,假设你的字段是文本对象。如果它们不是(即十进制,Ints等),则需要先将它们转换为各自的数据类型,然后在结果上调用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);

答案 4 :(得分:-1)

SelectedItem以字符串形式公开,但您已将其强制转换为对象。尝试用以下内容替换作业:

string da = comboBoxDC.SelectedItem;
string pr = comboBoxPL.SelectedItem;