0

Repeaterテーブルには異なる列があるため、動的テンプレートを使用する必要があるため、異なるテーブルから読み取るために a を使用します。

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

しかし、VS 2010 は、リピーターにネストされたプレースホルダーを認識していないようです。

そこで、プレースホルダーにリピーターを生成させようとしましたが、内部コードを手動で変更するにはどうすればよいでしょうか? 「innerHtml」オプションはありません。

アップデート

placeholder が適切な場合は確かですが、私が望むのは<ItemTemplate>動的に内部のものを生成することです。これは次のようなものです<%# DataBinder.Eval(Container.DataItem, "username") %>

別のテーブルから別のテーブル列を読み取っているため、これはユーザーが必要とするテーブルに基づいて選択する必要があります。

したがって、処理する前に ASPX コードを変更する必要があります。これを行うより良い方法はありますか?

4

1 に答える 1

1

Visual Studio は、Repeater にネストされたコントロールを取得しません。このためには、FindControl を使用して Repeater のコントロールにアクセスする必要があります。

Repeater 内のコントロールにアクセスするために使用できる 2 つの例を次に示します。

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を入力したいと思います。代わりにリテラルを使用できます。

編集

リテラルを使用して、データベースからのデータに基づいてリピーターを動的に設定します。

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 に答える