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

C# 如何将对象从组合框选定项转换为字符串,c#,winforms,C#,Winforms,这一切都在WINDOWS窗体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

这一切都在WINDOWS窗体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 + "\'";

text.tostring的输出是成功的,实际上是字符串。

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

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

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

string da = comboBoxDC.SelectedItem;
string pr = comboBoxPL.SelectedItem;
您可以在SelectedItem上调用该方法。来自MSDN

Object selectedItem = comboBox1.SelectedItem;

MessageBox.Show("Selected Item Text: " + selectedItem.ToString());
您可以在SelectedItem上调用该方法。来自MSDN

Object selectedItem = comboBox1.SelectedItem;

MessageBox.Show("Selected Item Text: " + selectedItem.ToString());
适用于我的WPF解决方案


在我的WPF解决方案上运行良好。

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

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

编辑 很抱歉,假设您的字段是文本对象,我的方法就可以了。如果它们不是(即小数、整数等),则需要首先将它们转换为各自的数据类型,然后对结果调用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);

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

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

编辑 很抱歉,假设您的字段是文本对象,我的方法就可以了。如果它们不是(即小数、整数等),则需要首先将它们转换为各自的数据类型,然后对结果调用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强制转换为特定类,然后转换为字符串。 在本例中,您已经用combobox绑定了datatable,因此可以用这种方式强制转换

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

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

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


为什么
comboBoxDC.SelectedItem.ToString()
没有剪切它?这是针对WinForms、WPF还是ASP.Net的?@Bobby,虽然很有趣,也非常相关,但现在还不清楚你链接到了什么@史蒂恩:没错……但我的5分钟宽限期已经结束了(但至少过去的第一次暗示了这一点)。@Bobby,不管怎样还是投了赞成票。一直很喜欢漫画。为什么
comboBoxDC.SelectedItem.ToString()
不剪切它?这是针对WinForms、WPF还是ASP.Net的?@Bobby,虽然很有趣,也非常相关,但并不清楚你链接到了什么@史蒂恩:没错……但我的5分钟宽限期已经结束了(但至少过去的第一次暗示了这一点)。@Bobby,不管怎样还是投了赞成票。我一直很喜欢漫画。如果这是一个WinForms组合框,SelectedItem属性有type object,而这段代码不会编译。是的,我试过了,我得到了这个错误。错误1:无法将类型“object”隐式转换为“string”。一个显式的转换存在(你错过了演员阵容吗?)我被困在web开发中太久了,我马上就认为这就是问题所在!按照建议,将查询字符串组件分别从“da”和“pr”更改为“da.ToString()”和“pr.ToString”。@Sean Shydow,同样,正如多次询问和暗示的那样-当您询问特定于您使用的UI框架的问题时,添加关于您正在编码的UI框架的标记。=)如果这是一个WinForms组合框,则SelectedItem属性具有type object,并且此代码无法编译。错误1:无法将类型“object”隐式转换为“string”。一个显式的转换存在(你错过了演员阵容吗?)我被困在web开发中太久了,我马上就认为这就是问题所在!按照建议,将查询字符串组件分别从“da”和“pr”更改为“da.ToString()”和“pr.ToString”。@Sean Shydow,同样,正如多次询问和暗示的那样-当您询问特定于您使用的UI框架的问题时,添加关于您正在编码的UI框架的标记。=)无论如何,当您将对象与字符串连接时,都应该会自动调用ToString()。虽然我不明白为什么它在原始问题中不起作用。它显示了
Object da=comboBoxDC.SelectedItem的System.Data.DataRowView
控制台.WriteLine(da.ToString())
当您将对象与字符串连接时,应该会自动调用ToString()。虽然我不明白为什么它在原始问题中不起作用。它显示了
Object da=comboBoxDC.SelectedItem的System.Data.DataRowView
控制台.WriteLine(da.ToString())它仍然显示
字符串da的
System.Data.DataRowView