6

テーブル(この場合は単一の列)の人口に関する簡単な質問。簡単な質問のように思えるかもしれませんが、私はフロントエンドの分野に携わったことがないので、ここで説明します。

レイアウトは 2 列 8 行です。何かのようなもの。

Name        A
LastName    B
Age         C
BirthDate   D
...

列 1 は安定しており、必要に応じて「タイトル」は変更されません。

A、B、C、D は、データベースへのクエリの結果です。したがって、私が考えることができるオプションは次のとおりです。

  1. 2Column - 8Row テーブルを描画し、TextBoxes を A、B、C、D... フィールドに配置します。そのため、後でクエリの結果を取り込むことができます (このオプションは、.CSS ファイルを使用してページ全体に吸収されるようにデザインを変更するため、最も「美しい」オプションではありません。

  2. データグリッドを設定します。ここでの問題は、後でクエリを使用するために A、B、C、D フィールドの一部を変更する必要があることです。そして、Datagridsがそのために機能しているかどうかはわかりません。

この問題を解決するための「良い方法」はありますか? 前もって感謝します。

編集。

A、B、C、D データは DataSet に保持されます。

4

2 に答える 2

10

私にとって、あなたがデータを説明している方法は、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 を使用して同様のレイアウトを実現することもできますが、単一のオブジェクトと複数のオブジェクトのバインドに同じ原則が適用されます。この例のテーブル レイアウトを、最終的に定義するマークアップに置き換えるだけです。

于 2012-08-13T15:09:28.137 に答える
1

WebForms には、DataSet から入力できるテーブル コントロールがあります。MSDN のドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.table.aspx

于 2012-08-13T14:04:57.873 に答える