0
for(i=0;i<10;i++)
{
    <%# Eval(i.ToString()).ToString()%>
}

列名がわからない場合、どうすれば eval を使用できますか。(データテーブル列が動的に作成されているかどうかを意味します)

  1. 私はDataTable
  2. 列名はdt.Column.Add()データベースから取得されます
  3. そのため、すべての列名が何になるかわかりません。
  4. 今、どうすればasp.netページに印刷できますか。Eval には文字列定数が必要です。<%# Eval("Column name").ToString()%>
4

3 に答える 3

1

GridViewはこれにはるかに適しています。これは、データソースから列を自動的に生成します。

ただし、のプロパティをループしてColumns各列からプロパティDataTableを取得することはできますが、データバインディングタグ()内でループをColumnName使用することはできません。foreach<%# %>

コードビハインドの列名を取得する方法は次のとおりです。

DataTable dt = new DataTable();

//populate data table

foreach (DataColumn col in dt.Columns)
{
    string columnName = col.ColumnName;
}

これをリピーターのアイテムテンプレートのループで使用できますが、データバインディングブロック(<%# %>)を使用Container.DataItemしていないため、現在のアイテムからデータをレンダリングすることが不可能ではないにしても非常に困難になります。

于 2013-02-07T12:18:32.270 に答える
0

問題は...あなたはどの列名が来ているか知っています。ステップ 2 で、dt.Column.Add() 文字列パラメーターがデータベースから取得されると述べています。したがって、最初にデータベースにアクセスして列名のリストを取得する別のプロセスが必要になります。

次に、このリストを繰り返し処理し、Eval 関数に値を設定します (追加した FOR ステートメントは、配列、リスト、または独自のデータ テーブル オブジェクトにある可能性のあるデータベース列名のリストを実際にループします)。

于 2013-02-07T12:10:03.797 に答える
0

あなたの問題のために

* ASP.NET *で

<asp:Repeater ID="rptrTester" OnItemDataBound="rptrTester_ItemDataBound" runat="server">
    <ItemTemplate>
        <asp:Repeater ID="rptrTesterInner" runat="server">
            <ItemTemplate>
                <%# Eval("COL_NAME")%>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

コード ビハインド C#

System.Data.DataTable dt = null;
    private void GetData()
    {
        System.Data.DataTable dtMain = // MyDAta Table;
        dt = new System.Data.DataTable();
        dt.Columns.Add("COL_NAME");
        System.Data.DataRow dr = null;
        for (int i = 0; i < dtMain.Columns.Count; i++)
        {
            dr = dt.NewRow();
            dr[0] = dtMain.Columns[0].ColumnName;
            dt.Rows.Add(dr);
        }
        rptrTester.DataSource = dtMain;
        rptrTester.DataBind();
    }
    protected void rptrTester_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Repeater rptrTesterInner = (Repeater)e.Item.FindControl("rptrTesterInner");
        rptrTesterInner.DataSource = dt;
        rptrTesterInner.DataBind();
    }
于 2013-02-07T12:40:19.980 に答える