将动态创建的控件绑定到数据表的数据

时间:2013-08-02 11:40:19

标签: c# winforms dynamic

我创建了一个Form Designer应用程序。你可以看到下面的screentshot。用户可以设计屏幕并使用名称保存。当用户保存表单时,应用程序只保存控件的类型(文本框,标签,按钮...),名称,宽度,高度,位置x,位置y等....

enter image description here

现在,我想让用户将SQL SELECT STATEMENT保存到应用程序中,然后让用户将数据表从该SQL SELECT STATEMENT绑定到用户创建的控件。

假设用户已保存此SELECT语句,如下所示

SELECT ID,NAME, LASTNAME FROM PERSONS

用户创建的表单有3个文本框。我怎么能把它们绑在一起呢?

你能告诉我一些线索吗?

1 个答案:

答案 0 :(得分:1)

由于您将数据库直接拉入单个控件,因此您可以避免数据绑定,只需直接填充文本框即可。

例如,当用户设计的表单初始化时,您可以枚举所有TextBoxes

var textControls = Controls.OfType<TextBox>().ToList();

然后,当您实际执行SELECT语句时,您可以动态填充TextBox个控件:

using (var conn = new SqlConnection())
{
    conn.Open();
    var command = new SqlCommand(selectStatement, conn);
    using (var rdr = command.ExecuteReader())
    {
        rdr.Read();
        int i = 0;
        while (i < rdr.FieldCount)
        {
            textControls[i].Text = rdr.GetString(i++);
        }
    }
}

上述代码的优点在于,无论您在用户设计的表单上使用多少字段或文本框,它对于您创建的每个表单都是相同的。

如果需要将结果保存回数据库,则可以在表单关闭时执行类似的过程:枚举TextBoxes,构建查询字符串的参数,然后执行它。

同样,如果你想要数据绑定,你可以创建一个List<>字段来读取SQL数据(而不是直接将它读入你的TextBox控件)。然后,使用TextBox中的相应字段枚举List<>控件和设置数据绑定。