【发布时间】:2014-03-14 10:49:29
【问题描述】:
我的 DAL 中有一个方法,它从 DataTable 填充 ComboBox。 ComboBox 显示正确,我有一个“保存”按钮,可以保存回我的数据库,工作很好......
public string populateLookUp(ref System.Windows.Forms.ComboBox Combo, string Id)
{
SqlCommand _comm = new SqlCommand();
_comm.Parameters.AddWithValue("@id", Id);
_comm.CommandText = "SELECT [name] FROM dbo.fnGetName(@id) ORDER BY [name]; ";
_comm.Connection = _conn;
_comm.CommandTimeout = _command_timeout;
DataTable dt = new DataTable();
try
{
SqlDataReader myReader = _comm.ExecuteReader();
dt.Load(myReader);
}
catch
{
MessageBox.Show("Unable to populate Name LookUp");
}
Combo.DataSource = dt;
Combo.DisplayMember = "name";
foreach (DataRow dr in dt.Rows)
{
if (dr["company_int_name"].ToString() == Contract.Company_trans_Selling_Entity.ToString())
{
Combo.SelectedItem = dr["company_int_name"].ToString();
}
}
return "";
}
但是很明显,当我重新编辑记录时,会再次调用此方法。好的,我现在已经编写了一个 ForEach 循环,它遍历我的 DataTable 并将行中的字符串与我传入的名称进行比较。如果两者匹配,我将设置
Combo.SeletedItem = dr["company_int_name"].ToString();
但是 selectedItem 没有设置,大概我需要某种事件来通知属性更改?
谢谢
【问题讨论】:
-
保存记录时,是否存储组合框中选择的值?
-
是的,我有一个传递值的保存方法。该值被传递到 sql INSERT 语句中。
-
尝试使用组合框的文本属性,如下所示:
Combo.Text = Contract.Name.ToString();而不是使用SelectedItem属性 -
只是一个建议。您可以在方法开始时取消注册 selectedIndexChanged 事件处理程序(如果您有),然后在结束时重新注册。
标签: c# winforms combobox datatable