私にとって、あなたがデータを説明している方法は、DataGrid
. このコントロールは、列名が上部に配置され、値の行が下部に表示される、標準の表スタイルで表示する予定のデータに最適です。Person
また、オブジェクトの 1 つまたは複数のインスタンス (ここではこれを呼び出します) を UIにバインドするつもりなのかどうかも少しわかりません。
先に進み、そのオブジェクトを定義しましょう:
public class Person {
public String Name { get; set; }
public String LastName { get; set; }
public int Age { get; set; }
public DateTime BirthDate { get; set; }
}
の 1 つのインスタンスを UI にバインドするPerson
には、単純な HTML テーブルが適切に機能するはずです。ここに値を表示するために使用TextBoxes
していますが、編集する必要がない場合は、Label
代わりに s を使用してください。
<table>
<tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" /></td></tr>
<tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" /></td></tr>
<tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" /></td></tr>
<tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" /></td></tr>
</table>
この時点でPerson
、コード ビハインドを使用してページ上のそれぞれのコントロールにプロパティをバインドするのは非常に簡単です。
この同じレイアウトを使用して の複数のインスタンスをPerson
ページに表示したい場合は、ASP.net Repeaterを使用してください。このマークアップは次のようになります。
<asp:Repeater ID="repPeople" runat="server">
<ItemTemplate>
<table>
<tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' /></td></tr>
<tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" Text='<%# Eval("LastName") %>' /></td></tr>
<tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" Text='<%# Eval("Age") %>' /></td></tr>
<tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" Text='<%# String.Format("{0:d}", Eval("BirthDate")) %>' /></td></tr>
</table>
</ItemTemplate>
</asp:Repeater>
Person
コード ビハインドでは、 のコレクションを のDataSource
プロパティにバインドするだけですRepeater
。
protected void Page_Load(object sender, EventArgs e) {
// A simple example using Page_Load
List<Person> people = new List<Person>();
for (int i = 0; i < 10; i++) {
people.Add(new Person() {Name = "Test", Age = 10, BirthDate=DateTime.Now, LastName = "Test"});
}
if (!IsPostBack) {
repPeople.DataSource = people;
repPeople.DataBind();
}
}
注:表の代わりに CSS を使用して同様のレイアウトを実現することもできますが、単一のオブジェクトと複数のオブジェクトのバインドに同じ原則が適用されます。この例のテーブル レイアウトを、最終的に定義するマークアップに置き換えるだけです。