2

下図のようにリピーターがいます。コード ビハインドでレポート ID を取得する方法 (hiddenContent2 内の式から) ?

式は

<%# Eval("ReportID") %>

注: 「FindControl」を使用しない方法を好みます。

ASP.NET

<asp:Repeater ID="rptReports" runat="server">
    <HeaderTemplate>
        <div></div>
    </HeaderTemplate>
    <ItemTemplate>
        <div id="repeaterIdentifier" class="repeaterIdentifier">
            <div id="reportTitle" class="reportTitle">
                <%# Eval("Title") +":" %>
            </div>
            <div id ="reportFrequency" class="reportFrequency">
                <%# " Frequency - "+ Eval("Frequeny") %>
            </div>
        </div>

        <div class="reportContent">
            <div class="repeaterLine">
                <asp:TextBox ID="txtEmailRecipients" runat="server" class="textEdit" Text='<%# Eval("Recipients")%>' TextMode="MultiLine"></asp:TextBox>
            </div>
        </div>

        <div id="hiddenContent2"> 
             <%# Eval("ReportID") %>
        </div>
    </ItemTemplate>
</asp:Repeater>

コードビハインド

protected void Save_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in rptReports.Items)
    {
        foreach(Control c in item.Controls)
        {
            string test1 = c.ID;
            Type t = c.GetType();
        }
        string emails = ((TextBox)item.Controls[1]).Text;
    }
}
4

2 に答える 2

6

これを試して、

foreach (RepeaterItem item in rptReports.Items)
{
    Label lblReportID= (Label)item.FindControl("lblReportID");
    string ReportID = lblReportID.Text;
}

「div」を使用している場合は、これを試してください:

 <div id="hiddenContent2" runat="server"> 
        <%# Eval("ReportID") %>
 </div>

 foreach (RepeaterItem item in rptReports.Items)
 {
     System.Web.UI.HtmlControls.HtmlGenericControl hiddenContent2 = (System.Web.UI.HtmlControls.HtmlGenericControl)item.FindControl("hiddenContent2");
     string ReportID = hiddenContent2.InnerHtml;
 }
于 2012-08-06T08:48:48.757 に答える
2

Repeater の ItemIndex プロパティを使用できます。これはサンプルです:

<asp:Repeater runat="server" ID="repTest">
    <ItemTemplate>
        <div id="hDiv">
            <%# Eval("SomeID") %>
        </div>
    </ItemTemplate>
</asp:Repeater>

コードビハインド:

protected void Page_Load(object sender, EventArgs e)
{
    var objects =
        new object[] {
            new {SomeID = 1},
            new {SomeID = 2},
            new {SomeID = 3},
            new {SomeID = 4}
        };

    repTest.DataSource = objects;
    repTest.DataBind();
}

protected void btnClick(object sender, EventArgs e)
{
    var data = (object[])repTest.DataSource;
    foreach (RepeaterItem item in repTest.Items)
    {
        var obj = data[item.ItemIndex];
        var id = obj.GetType().GetProperty("SomeID").GetValue(obj, null);
    }
}

だから、あなたがする必要がある2つのこと。

  • DataSource を自分の型にキャストします。(私はサンプルのためだけに object[] を使用しました)。
  • data[item.ItemIndex] を型にキャストします。私は匿名タイプを持っているので、リフレクションを使用しているだけなので、タイプがあればキャストできます。
  • 于 2012-08-06T09:24:04.277 に答える