尝试访问ASP后面的代码:Repeater ItemTemplate

时间:2017-01-01 18:36:28

标签: c# asp.net

环境是用ASP 2.0编写的一个古老的应用程序。

我有这个代码将数据库源显示在ASP:repeater:

<asp:Repeater ID="Repeater" runat="server"    DataSourceID="DS" OnItemDataBound="On_Repeater_ItemDataBound">
    <ItemTemplate>
        <asp:CheckBox ID="CB" runat="server" Text='<%# Eval("My_DB_Field") %>'></asp:CheckBox>
    </ItemTemplate>
</asp:Repeater>

工作正常。 但是,我想更改代码,以便有时CB.Text = My_DB_Field(现在),有时它等于其他DB字段值。 所以我需要在On_Repeater_ItemDataBound方法后面的代码中执行此操作。

但是如何访问此方法中的模板项DB字段?

换句话说,等同于

Text='<%# Eval("My_DB_Field") %>'
代码背后的

我看到我要找的东西可以通过以下方式访问: ((System.Data.DataRowView)(e.Item.DataItem)).Row.ItemArray[12] 但是,Row.ItemArray是一个对象[]

因此,对DB字段ID(12)进行硬编码看起来非常危险。 我想知道是否有像对象这样的字典,所以我可以通过DB字段名称(“My_DB_Field”)访问它?

1 个答案:

答案 0 :(得分:2)

您可以使用DataBinder.Eval

string value = DataBinder.Eval(e.Item.DataItem, "My_DB_Field").ToString();

DataRowView row = e.Item.DataItem as DataRowView;
string value = row["My_DB_Field"].ToString();