获取多个生成控件的值

  • 本文关键字:控件 获取 c# wpf
  • 更新时间 :
  • 英文 :


我有一个数据库,例如有3列。

ID(int)、名称(Varchar)、日期(Datetime)。

比方说,我想通过我的应用程序向这个数据库中添加一行,并且我想要不同DataType的不同控件。所以对于ID,我想要一个带有上/下箭头的文本框。对于name是一个简单的TextBox,对于Date是一个DatePicker。

这很容易,我将数据库中的SchemaTable调用到一个循环中,并生成一个if语句来检查DataType=System.String or System.DateTime or System.Int32

就是这样。

现在,当我按下回车键时该怎么办?控件是动态添加的,并且都具有不同的属性。但我需要它们中的值,以便将其保存到数据库中。

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

你们要怎么解决这个问题?

如果所有的都是文本框(现在是这样),我可以用以下代码从所有文本框中获取文本属性:

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);
}

}
}

这还不清楚。如果您有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();
}
}
}

最新更新