C# 将动态创建的控件绑定到datatable的数据

C# 将动态创建的控件绑定到datatable的数据,c#,winforms,dynamic,C#,Winforms,Dynamic,我已经创建了一个表单设计器应用程序。您可以看到下面的屏幕快照。用户可以设计一个屏幕并用名称保存它。当用户保存表单时,应用程序只保存控件的typetextbox、标签、按钮…、名称、宽度、高度、位置x、位置y等 现在,我想让用户将一条SQL SELECT语句保存到应用程序中,然后让用户将该SQL SELECT语句中的数据表绑定到用户创建的控件 比如说,用户已经保存了如下SELECT语句 SELECT ID,NAME, LASTNAME FROM PERSONS 用户创建的表单有3个文本框。我怎样

我已经创建了一个表单设计器应用程序。您可以看到下面的屏幕快照。用户可以设计一个屏幕并用名称保存它。当用户保存表单时,应用程序只保存控件的typetextbox、标签、按钮…、名称、宽度、高度、位置x、位置y等

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

比如说,用户已经保存了如下SELECT语句

SELECT ID,NAME, LASTNAME FROM PERSONS
用户创建的表单有3个文本框。我怎样才能把它们绑在一起


你们能给我一些线索吗

由于直接从数据库拉入单个控件,因此可以避免数据绑定,直接填充文本框

例如,当用户设计的表单初始化时,可以枚举所有文本框:

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

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


类似地,如果要进行数据绑定,可以创建一个字段列表,将SQL数据读入,而不是直接读入TextBox控件。然后,枚举TextBox控件,并使用列表中的相应字段设置数据绑定。

用户将此sql语句保存在何处?在一个文本框或什么的?我将制作另一个winform屏幕,它将有一个大的多行文本框。这样用户甚至可以输入一个复杂的select语句。我将把这些select语句作为一个想法存储在DB中,您可以将这个查询作为一个字符串,您可以检查select和FROM之间的单词数。然后您可以动态创建文本框。将数据绑定到控件需要明确指示哪个控件绑定到哪个字段/列,我认为这些信息也应该保存。好主意。但我想让用户从属于每个文本框的组合框中选择FieldName。因为用户可能有一个包含10列和5个文本框的select语句。因此,我希望他通过从组合框中选择来设置TextBox的字段名。。这有意义吗?@ayilmaz,当然,这可能没有什么不同,因为您可能有一个映射列表,其中的字段指向哪个文本框,您可以使用该列表1查找正确的文本框,2从结果集中填充正确的字段。
var textControls = Controls.OfType<TextBox>().ToList();
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++);
        }
    }
}