C# 如何将对象从组合框选定项转换为字符串
这一切都在WINDOWS窗体C#中,MICROSOFT VISUAL STUDIO 2008 我有一个这样显示的组合框: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
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