您好我正在编写一个来自数据库的IO程序,我有以下函数从数据库中读取并将行添加到组合框中:
private void loadFromTuzel()
{
string constring = "Server=localhost;Database=ozturk;Uid=____;pwd=_____";
MySqlConnection newCon = new MySqlConnection(constring);
string selectCommand = "SELECT * FROM ozturk.tuzelkisi";
MySqlCommand cmd = new MySqlCommand(selectCommand, newCon);
MySqlDataReader myReader;
newCon.Open();
myReader = cmd.ExecuteReader();
while (myReader.Read())
{
cbselected.Items.Add(myReader["name"].ToString() + " " + myReader["Surname"].ToString());
}
}
从代码中可以看出程序将数据从数据库加载到组合框......
我需要以不同的形式使用此函数,但需要将数据加载到不同的组合框中,我想知道是否可以将工具箱项作为参数添加到我的函数中,这样就可以了像这样
private void myfunction(thecombobox parameter comes here)
{
// The execution code and than
// thecomboboxparameter.items.add......
}
所以我可以通过添加参数值一遍又一遍地使用这个函数,这是可能的吗?
由于
答案 0 :(得分:0)
是的,这是可能的,但是你可以通过完全在UI代码之外移动逻辑来更好地适应,并且只需从数据库中返回项目。不要将ComboBox传递给参数,而是从该方法获取结果,然后在UI中将所有内容绑定在一起。
这是分离关注的基础。您的ComboBoxes不应该关心数据来自何处。他们只关心他们有数据显示。
对于问题的简单回答,只需按照以下方式调整方法:
public static class Utilities
{
public static void loadFromTuzel(ComboBox cbo)
{
/// All of you other logic
while (myReader.Read())
{
cbo.Items.Add(myReader["name"].ToString() + " " +
myReader["Surname"].ToString());
}
}
}
如果您关注SoC,那么您将拥有以下内容:
public class Repository {
public IEnumerable<string> GetNamesFromTuzel()
{
// All of the same logic
while (myReader.Read())
{
yield return myReader["name"].ToString() + " " +
myReader["Surname"].ToString();
}
}
}