要选择药物的company_name
,date_of_mfg
,date_of_exp
,首先选择medicine_name
,并根据其SelectedIndexchanged
事件,使用以下内容代码:
private void combomedicine_SelectedIndexChanged(object sender, EventArgs e)
{
combocompany.Items.Clear();
string str = "select med_name,mnf_name from tbl_mdcnentry";
command.Connection = connection;
command.CommandText = str;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (combomedicine.SelectedItem.ToString() == reader.GetValue(0).ToString())
{
combocompany.Items.Add(reader.GetValue(1).ToString());
break;
}
}
reader.Close();
}
在调试时,行if (combomedicine.SelectedItem.ToString()
== reader.GetValue(0).ToString())
警告:Possible unintended reference comparison; to get a value comparison, cast the right hand side to type string
(虽然我已经投放了)并且从下拉菜单中选择新项目时不会产生任何输出。
我已经进行了搜索,并且随处可见的解决方案是添加ToString()
但仍无法正常工作。
答案 0 :(得分:1)
为了比较字符串,我更喜欢使用string.Equals,你可以提供比较类型,我建议尝试使用InvariantCultureIgnoreCase来避免套管问题。
您是否已调试并检查两个字符串实际上是否相同?
另外,考虑将数据访问代码从用户界面移开,从长远来看,它将更容易维护和理解您的代码。
编辑:将DataReader封装在一个使用块中也是一种更好的做法:
using(SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
if (string.Equals(combomedicine.SelectedItem.ToString(),
reader.GetValue(0).ToString(),
StringComparison.InvariantCultureIgnoreCase)
{
combocompany.Items.Add(reader.GetValue(1).ToString());
break;
}
}
}
答案 1 :(得分:0)
这是我在完成here后所做的事情。
private void combomedicine_SelectedIndexChanged(object sender, EventArgs e)
{
combocompany.Items.Clear();
GetAutoCombobox_filled();
}
//Helper method
public void GetAutoCombobox_filled()
{
// int select_item;
string str = "select med_name,mnf_name,mfg_date,exp_date from tbl_mdcnentry";
command.Connection = connection;
command.CommandText = str;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (combomedicine.SelectedItem.ToString() == (string)reader["med_name"])
{
combocompany.Items.Add(reader.GetValue(1).ToString());
dateTimePicker2.Text=reader.GetValue(2).ToString();
dateTimePicker3.Text = reader.GetValue(3).ToString();
break;
}
}
reader.Close();
}