2012-08-13 9 views
5

テーブル(ここでは単一の列)についての簡単な質問です。 簡単な質問のように思えるかもしれませんが、私はフロントエンドに関わったことは一度もありませんでした。ASP.NETページでテーブルを作成する

レイアウトは2列8行です。 何かが好きです。

Name  A 
LastName B 
Age   C 
BirthDate D 
... 

カラム1は安定していますが、必要に応じて「タイトル」は変更されません。

A、B、C、Dは、データベースに対するクエリーの結果です。だから、私はしていると考えることができますオプション: - ...フィールドをA、B、C、Dで8Rowテーブルと場所のTextBox

  1. は2Columnを描画します。後で、クエリの結果が表示されます(このオプションはTextBoxによって.CSSファイルを使用してページ全体が吸収されるように設計されているため、最も美しいものではありません)。

  2. DataGrid 。私が思うここでの問題は、A、B、C、Dの各フィールドのいくつかは、後でクエリの使用のために変更する必要がありますということです。そして、私は、データグリッドがそのためにメンターしているかはわからない。

この問題を解決するための「良い方法」がありますか? ありがとうございます。

EDIT。

A、B、C、Dデータは、DataSetに保持されます。あなたはMSDNのドキュメントを参照データセットから移入することができるはずWebフォームのテーブルコントロールあります

+1

Visual Studioは、多くの言語で使用されているIDEです。何のテーブル?どのようにそれを照会するつもりですか? – Oded

+0

@OdedそれはC#/ aspxプロジェクトです。 DBはSQLです。 A、B、C、D ...に配置されるSQLからのデータは、DataSetにあります。 –

+0

aspx ... WebFormsまたはMVC? – Oded

答えて

7

は、あなたがデータを記述している方法は本当にのためにあまりにもよく向いていませんa DataGrid。このコントロールは、標準の表形式で表示する予定のデータに最も適しています。ここでは、列名が一番上に表示され、その下に値の行が表示されます。また、オブジェクトの1つまたは複数のインスタンス(今のところPersonと呼ぶ)をUIにバインドする場合は、私には少し不明です。

のは、先に行くと、そのオブジェクトを定義してみましょう:

public class Person { 
    public String Name { get; set; } 
    public String LastName { get; set; } 
    public int Age { get; set; } 
    public DateTime BirthDate { get; set; } 
} 

あなたのUIにPersonの単一のインスタンスをバインドするには、簡単なHTMLテーブルが正常に動作する必要があります。私はここに値を表示するのにTextBoxesを使用していますが、それらを編集する必要がない場合は代わりにLabelを使用してください。

<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に移動してください。このためのマークアップは、より多くのようになります。

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(); 
    } 

} 

注:あなたは可能性が

コードビハインドで
<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> 

、あなただけRepeaterDataSourceプロパティにPersonのコレクションをバインド表の代わりにCSSを使用して同様のレイアウトを実現しますが、単一対複数のオブジェクトのバインドにも同じ原則が適用されます。この例のテーブルレイアウトは、最終的に定義するマークアップに置き換えてください。

+0

マイクに感謝します!それはただひとりの人であり、あなたが想定していた通りのものです。変更しないセルにラベルを使用できると思ってください。また、ユーザーがページで作業している間に変更できるセルのテキストボックスもあります。 –

関連する問題