わかりましたので、画面上のテキストボックスの数が特定の基準に一致する DataTable の行数に関連する wpf を作成しようとしています。テーブルのデータに基づいて TextBoxes を設定したい。
私が試したこと 1)
int numContacts = 0;
List<TextBox> list = new List<TextBox>();
IEnumerable<DataRow> selectedContacts = from myRow in
ds.Tables["contacts"].AsEnumerable()
where myRow.Field<int>("company_ID") == 1
select myRow;
try
{
foreach (var item in selectedContacts)
{
list.Add(new TextBox());
// Here Is where I would like to setup the text box
// I'm not quite sure how I would do that though
numContacts++;
}
}
catch {}
基本的に、次のようにプロパティを設定したいと思います。
TextBox[,] tb = new TextBox[numContacts, 3];
var width = txt_name.Width;
var height = txt_name.Height;
Thickness marginName = txt_name.Margin;
for (int i = 0; i < nametb.GetLength(0); i++)
{
tb[i, 0] = new TextBox();
tb[i, 0].HorizontalAlignment = HorizontalAlignment.Left;
tb[i, 0].VerticalAlignment = VerticalAlignment.Top;
tb[i, 0].Name = "name"+i;
tb[i, 0].Width = width;
tb[i, 0].Height = height;
tb[i, 0].Margin = new Thickness(marginName.Left, marginName.Top + (height+3)*(i+1), 0, 0);
grid.Children.Add(tb[i, 0]);
}
では、Linq はこれに最適なオプションですか? 将来的には、TextBoxes を作成し、各行の情報を入力してから、ユーザーが変更を加えた場合に最終的に DataTable に保存したいと考えています。
これが私のDataTableのセットアップ方法です:
DataSet ds = new DataSet();
DataTable contactTable = new DataTable("contacts");
contactTable.Columns.Add("company_ID", typeof(int));
contactTable.Columns.Add("name");
contactTable.Columns.Add("title");
contactTable.Columns.Add("email");
contactTable.Rows.Add(1, "Jim Bean", "CEO", "Jbean@acompany.ca");
contactTable.Rows.Add(1, "Tim Brown", "CFO", "tbrown@acompany.ca");
contactTable.Rows.Add(1, "Nancy Smith", "CTO", "nsmith@acompany.ca");
contactTable.Rows.Add(2, "Norman Jackson", "CEO", "njackson@bcompany.ca");
contactTable.Rows.Add(3, "Todd White", "CFO", "twhite@ccompany.ca");
ds.Tables.Add(contactTable);