我有一个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);
}
}
}
答案 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();
}
}
}