私は、例えば3列のデータベースを持っています。複数の生成されたコントロールの値を取得
ID(int)、名前(Varchar)、日付(Datetime)。
私のアプリケーションを介してこのデータベースに行を追加したいと思います。異なるデータ型に対して異なるコントロールを使用したいとします。 ID
の場合、上向き/下向き矢印のあるテキストボックスが必要です。 name
の場合は単純なTextBox、Date
の場合はDatePickerです。
これは簡単です。自分のデータベースからSchemaTableをループに呼び出し、if文でDataType = System.String or System.DateTime or System.Int32
をチェックします。
それだけです。
Enterを押したときの操作は?コントロールは動的に追加され、すべてのプロパティが異なります。しかし、私はこれをDataBaseに保存するために、すべての値を必要とします。
私の考えは、コントロールContent Property
をループし、値を取得します。 しかし、多くのコントロールには異なるコンテンツプロパティがあります。 たとえば、DatePickerにはBox + Pickアイコンがあります。
どのようにあなたたちはこれを解決するつもりですか?
すべての場合には、私はこのコードでそれらのすべてからのTextプロパティを取得することができます(彼らは今のところです)のTextBoxた:
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 + "')";
}
が、これは異なるため、コントロールの、今働くことができないことができます毎回変更されるので決して静的ではなく、コントロールを生成する必要があります。
これは、私はそれが明確ではありません
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);
}
}
}
MVVMパターンはすでに使用していましたか? *あなたがWPFで何をしたいのですか?WPF関連の質問のための良い答えのほとんどは、MVVMに基づいています。あなたがまだそれを知らない/使用していない場合は、それ。 – grek40
私はいつもmvvmを学ぶことに失敗しました。彼はそれについていくつかのチュートリアルを作成するので、mvvmパターンで動作する男を待っている。だから私はコードビハインドで働いていません。そして、私はmvvmでこれがどのように動作するのかわかりません。なぜなら、mvvmではプロパティをコード化する必要があるかどうかです。私のデータベースや2または10に1列を持つことができるので、私は同じプロパティを持っていません。これは "私はこれと永遠にこれを持っている"のようなものではありません。だから私は静的なプロパティを作ることができません(静的な意味では、静的なプロパティではなくハードコードされているという意味です)。 – Luranis
MVVMは魔法のように仕事をしません。 SchemaTableのクエリをアプリケーションのデータモデルに変換し、データモデルを挿入ステートメントに変換し、データモデルを個別に表示することができます。これは、パズルを段階的に解決するためのステップですデータベースからユーザーインターフェイスに複雑さの単一の巨大な一括で。 – grek40