0

我使用 aRepeater从不同的表中读取,因为表有不同的列,我将不得不使用动态模板。

 <asp:Repeater ID="tableData" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
                     <asp:PlaceHolder ID="tableBody" runat="server">
                            </asp:PlaceHolder>
           </ItemTemplate>
 </asp:Repeater>

但是 VS 2010 似乎无法识别嵌套在中继器中的占位符。

所以我试图让占位符生成中继器,但是如何手动更改内部代码?没有“innerHtml”选项。

更新

我注意到如果占位符是合适的,但我想要的是<ItemTemplate>动态生成内部的东西,就像<%# DataBinder.Eval(Container.DataItem, "username") %>

因为我正在从不同的表中读取不同的表列,所以需要根据用户想要的表进行选择。

所以我需要在处理之前修改 ASPX 代码,有没有更好的方法来做到这一点?

4

1 回答 1

1

Visual Studio 不会选择嵌套在 Repeater 中的控件。为此,您将需要使用 FindControl 来访问中继器中的控件。

下面是两个示例,您可以使用它来访问中继器中的控件。

1)循环通过中继器项目

foreach (RepeaterItem item in tableData.Items)
{
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
    {
        var ph = (PlaceHolder)item.FindControl("tableBody");

        //Do something with your placeholder
        ph.Visible = true;
    }
}

2)ItemDataBound在中继器上使用事件

void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var ph = (PlaceHolder) e.Item.FindControl("tableBody");

        //Do something with your placeholder
        ph.Visible = true;
    }
}

如果您打算使用该ItemDataBound事件,则需要将以下属性添加到您的中继器:

OnItemDataBound="tableData_ItemDataBound"

你能澄清一下你到底想用你的占位符做什么吗?占位符没有“innerHTML”属性。我认为您对 JavaScript 有误解。我想你想用一些 Html 填充你的转发器内的控件。您可以改用 Literal。

编辑

使用 Literal 根据数据库中的数据动态填充中继器。

void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Get column from datasource
        DataRowView drv = (DataRowView)e.Item.DataItem;

        var lit = (Literal) e.Item.FindControl("MyLiteral");

        //Populate Literal with data
        StringBuilder htmlMarkup = new StringBuilder();

        htmlMarkup.AppendFormat("{0}<br />", drv["username"].ToString());
        htmlMarkup.AppendFormat("{0}<br />", drv["Name"].ToString());
        htmlMarkup.AppendFormat("{0}<br />", drv["lastname"].ToString());

        lit.Text = htmlMarkup.ToString();
    }
}

如您所见,我正在检索数据并以我想要的格式输出我想要的内容。

于 2012-04-14T13:42:07.567 回答