我有一个从DataTable
填充ComboBox
的方法:
public string populateCompanyTransSellingEntityLookUp(ref System.Windows.Forms.ComboBox Combo, string Id, Contract Contract)
{
SqlCommand _comm = new SqlCommand();
_comm.Parameters.AddWithValue("@id", Id);
_comm.CommandText = "SELECT [name] FROM dbo.fnGetList(@id) ORDER BY [name]; ";
_comm.Connection = _conn;
_comm.CommandTimeout = _command_timeout;
DataTable dt = new DataTable();
try
{
SqlDataReader myReader = _comm.ExecuteReader();
dt.Load(myReader);
Combo.DataSource = dt;
Combo.DisplayMember = "name";
foreach (DataRow dr in dt.Rows)
{
if (dr["name"].ToString() == Contract.Company_Name.ToString())
{
Combo.Text = dr["company_int_name"].ToString();
}
}
}
catch
{
MessageBox.Show("Unable to populate Company Name LookUp");
}
return "";
}
我将保存的值Contract.Company_Name
传递到forEach循环中,以便从DataTable
中查找所需的SelectedItem
。ComboBox
中填充了来自Combo.Datasource =dt;
的DataTable值,但未设置选定项。代码编译时没有异常。如果删除Datasource = dt;, the
SelectedItem is set no problem. Why is the
Datasource overriding my
SelectedItem ',并且是否存在我'我的装订没打好?
谢谢大家
4条答案
按热度按时间bmp9r5qi1#
首先你必须设置valueMember,然后你可以设置selectedValue属性来代替SelectedItem。Item是一个数据源记录,所以在你的例子中它应该是
SelectedItem = dr
!但是我不确定这是否有效。erhoui1w2#
试试这个:
6g8kf2rb3#
我建议使用
SelectedValue
,这样就不需要“手动”遍历值了。此外,在只需要字符串值集合的情况下,也不需要使用“重量级”
DataTable
。需要注意的几点:
1.释放所有处理外部资源的对象(
SqlConnection
、SqlCommand
和SqlDataReader
)1.使用有关字符串类型的精确信息创建
SqlParameter
对于提供数据库中列的大小非常重要。此信息将提高服务器端的SQL查询性能。1.不要将组合框作为引用传递,
populate
方法不会创建新示例,而只使用给定的ComboBox
示例。fzwojiic4#
谢谢你的帮助,我编辑了代码,因为我的问题要琐碎得多。