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

本文关键字:项目 转换 字符串 对象 组合 | 更新日期: 2023-09-27 18:03:47

这一切都在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的输出是成功的,实际上是字符串。

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

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

适用于我的WPF解决方案。

您需要将selecteditem强制转换为特定的类,然后再转换为字符串。在本例中,您已经用combobox绑定了datatable,因此以这种方式强制转换。

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

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

Object selectedItem = comboBox1.SelectedItem;
MessageBox.Show("Selected Item Text: " + selectedItem.ToString());

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

要获得您要查找的数据,请按照下面的示例修改您的代码。

编辑抱歉,假设您的字段是文本对象,我的方法会起作用。如果它们不是(例如Decimals、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);

SelectedItem以字符串形式公开,但您已将其强制转换为对象。尝试将分配替换为:

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