我试图在数据库表上存储我的应用程序的一些参数。该表包含多行,其中包含一个键 - >价值关系。在我的Windows窗体程序(用C#编写)中,我有多个控件,允许用户与数据库中存储的配置进行交互。
例如,我的数据库表如下所示:
id option_name option_value
1 serial_port_baudrate 9600
2 serial_port_stopbits one
在我的表单上,我有控件允许更改这些值。在一些research之后,我使用bindingSource
类和filter
属性获得了预期结果。但我必须使用可视化编辑器为每个文本框创建一个bindingSource对象。你能帮助我用多个文本框和控件来实现这个目的而不使用可视化编辑器吗?
我不知道是否有可能,但我想编写一个解决方案,我可以在我的表单上命名文本框,其中包含与数据库中的值相同的Key的相同名称,然后它们将得到正确的应用程序运行时的值。非常感谢您提供的任何信息或提示。
提前致谢。
答案 0 :(得分:0)
好吧,您可以将所有文本框命名为与数据库字段相同,然后遍历表单上的所有文本框控件。使用表单的名称作为参数,如下面的代码所示:
DataTable table = new DataTable();
//Populate datatable
TextBox txt = new TextBox();
foreach(DataRow row in table.Rows)
{
String controlID = row["option_name"].ToString();
txt.ID = controlID;
(new TextBox()).ID = controlID;
txt.Text = table.Rows[table.Rows.IndexOf(row)][controlID].ToString();
}
答案 1 :(得分:0)
这是我用于我的选项表的内容:
void loadOptions(Control parent)
{
foreach (Control c in parent.Controls)
{
DataRow[] res = options.Select("option='" + c.Name + "'");
if (c is GroupBox)
{
loadOptions(c);
continue;
}
if (res.Length < 1) continue;
DataRow row = (DataRow)res.GetValue(0);
String value = row["value"].ToString();
if (c is TextBox)
{
c.Text = value;
}
else if (c is CheckBox)
{
((CheckBox)c).Checked = Convert.ToBoolean(value);
}
else if (c is NumericUpDown)
{
((NumericUpDown)c).Value = int.Parse(value);
}
}
}
我不确定这是否是最佳解决方案,但它确实有效。如果有人有,我总是在找一个更好的方式。