2

次のような SQL 文字列を宣言しています。

string SQL = "SELECT Column1, Column2, Column3, Date1, Date2 FROM Somewhere";

列の数は状況によって異なり、日付は StartDate、InterestDate などの別の名前で呼ばれることがあります。

私がやりたいのは、これを ASP.NET Repeater にバインドし、上記の例に対して以下のようにテーブルを作成することです。

<table>
  <tr>
    <th>Column1</th>
    <th>Column2</th>
    <th>Column3</th>
    <th>Date1</th>
    <th>Date2</th>
  </tr>
  <tr>
    Rows of values...
  </tr>
</table>

データを Repeater にバインドして Eval を使用しても問題ありませんが、それは固定数の列と列名に依存しています。これはプログラム的な方法で行うことができますか?

4

4 に答える 4

3

GridView を使用する場合、AutoGenerate columns プロパティを true に設定し (既定では true)、GridView をデータにバインドできます。

非常に簡単に作成するには、SQLDataSourceコントロールを使用することをお勧めします。

asp.net サイトには、asp.net でのデータ バインディングの概要があります (ObjectDataSource を使用しますが、概念はまったく同じです)。このページでは、GridView をカスタマイズするいくつかの方法についても説明します。

更新: これは、rowdatabound イベントを処理して日付列をフォーマットする方法のサンプルです (他の回答のコメントによる)。これはおそらくもっとうまくできるかもしれませんが、これで始められるはずです。

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView rowView = (DataRowView)e.Row.DataItem;

    for (int i = 0; i < rowView.Row.ItemArray.Length; i++)
    {
        DateTime? tmpDate = rowView[i] as DateTime?;

        if (tmpDate.HasValue)
        {
            if (tmpDate.Value.Second > 0)
                e.Row.Cells[i].Text = tmpDate.Value.ToShortTimeString();
            else
                e.Row.Cells[i].Text = tmpDate.Value.ToShortDateString();
        }
    }
}
于 2009-05-28T17:45:22.337 に答える
1

実行時にリピーターを動的に作成する例へのリンクを次に示します。唯一の要件は、フォームに ASP:Panel を挿入することです。

http://programming.top54u.com/post/ASP-Net-Repeater-dynamically-using-C-sharp-code.aspx

于 2009-05-28T17:53:41.027 に答える
0

データ ソースに基づいて列を自動的に生成するGridViewを使用できます。

于 2009-05-28T17:45:21.933 に答える
0

DataReaderを使用してデータを取得する場合、名前ではなくインデックスを使用して列にアクセスできます。それらの数が一定でなくても、それらすべてをループできるはずです。

<% while(myRepeaterWithData.Read()) {
       for (int i = 0; i < myReaderWithData.FieldCount; i++) { %>
           The data on this row in column number <%= i%> is 
           <%= myRepeaterWithData[i] %>.
<%     }
    } %>
于 2009-05-28T17:48:02.473 に答える