更改PlaceHolder的内部ASPX代码?

时间:2012-04-14 13:22:22

标签: asp.net repeater placeholder

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

 <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代码,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

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

以下是两个可用于访问Repeater中控件的示例。

1)通过Repeater项目循环

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)在Repeater上使用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事件,则需要将以下属性添加到R​​epeater:

OnItemDataBound="tableData_ItemDataBound"

您能澄清一下您对占位符的确切要求吗?占位符没有“innerHTML”属性。我认为你误解了JavaScript。我认为你想用一些Html填充你的转发器内的控件。你可以改用文字。

修改

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

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

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