获取多个生成的控件的值

时间:2017-11-01 14:57:10

标签: c# wpf

我有一个DataBase,例如3列。

ID(int),name(Varchar),date(Datetime)。

让我们说,我想通过我的应用程序在这个DataBase中添加一行,我想要不同的DataTypes控件。 所以对于ID,我想要一个带有上/下箭头的TextBox。对于name一个简单的TextBox,对于Date一个DatePicker。

这很简单,我将SchemaTable从我的DataBase调用到循环中并创建一个if语句来检查DataType = System.String or System.DateTime or System.Int32

就是这样。

现在按下回车怎么办?控件是动态添加的,并且都具有不同的属性。但我需要所有这些值,以将其保存到DataBase中。

我的想法是,循环控件Content Property并获取值。 但是许多控件具有不同的内容属性。 例如,DatePicker具有Box + Pick-Icon。

你们怎么解决这个问题?

如果所有都是TextBoxes(它们现在都是),我可以使用以下代码从所有文本属性中获取Text属性:

List<TextBox> textboxes = new List<TextBox>();
textboxes = sp.Children.OfType<TextBox>().ToList();
string query = "INSERT INTO " + myTable + " (";

for (int i = 0; i < textboxes.Count; i++)
{
    if (i < textboxes.Count - 1)
        query += textboxes[i].Name + ",";
    else
        query += textboxes[i].Name;
}

query += ") VALUES (";

for (int i = 0; i < textboxes.Count; i++)
{
    if (textboxes[i] == null)
    {
        textboxes[i].Text = "0";
    }

    if (i < textboxes.Count - 1)
        query += "'" + textboxes[i].Text + "',";
    else
        query += "'" + textboxes[i].Text + "')";
}

但这现在无法正常工作,因为每次都可以更改不同的控件,因此它们永远不会是静态的,我必须生成控件。

这是我如何添加控件的代码(只显示DatePicker和普通TextBox以便更好地理解)

foreach (DataRow field in schemaTable.Rows)
        {
            if (field.Field<String>("ColumnName") != "id")
            {
                if (field["DataType"].ToString() == "System.DateTime")
                {
                    DatePicker datePicker = new DatePicker();
                    MaterialDesignThemes.Wpf.HintAssist.SetHint(datePicker,
                        UppercaseFirst(field.Field<String>("ColumnName")));
                    MaterialDesignThemes.Wpf.HintAssist.SetIsFloating(datePicker, true);
                    datePicker.Margin = new Thickness(5);
                    datePicker.Name = field.Field<string>("ColumnName");
                    datePicker.Tag = field.Field<Boolean>("AllowDBNull");
                    sp.Children.Add(datePicker);
                }
                else
                {
                    TextBox textBox = new TextBox();
                    MaterialDesignThemes.Wpf.HintAssist.SetHint(textBox, UppercaseFirst(field.Field<String>("ColumnName")));
                    MaterialDesignThemes.Wpf.HintAssist.SetIsFloating(textBox, true);
                    textBox.Margin = new Thickness(5);

                    textBox.Name = field.Field<String>("ColumnName");
                    textBox.Tag = field.Field<Boolean>("AllowDBNull");

                    sp.Children.Add(textBox);
                }


            }
        }

1 个答案:

答案 0 :(得分:2)

目前尚不清楚。如果您有3列且ID是增量,请使用以下代码:

foreach (var row in textboxes )
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {

        string saveQuery = "INSERT into " + myTable+ " (name, date) VALUES (@name, @date)";
        using (SqlCommand querySave = new SqlCommand(saveQuery))
        {
            querySave.Connection = connection;

            querySave.Parameters.Add("@name", SqlDbType.VarChar, 255).Value = (row == null) ? 0 : row.Text;
            querySave.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Now;

            connection .Open();
            querySave.ExecuteNonQuery();
            connection .Close();

        }
    }
}