En parcourant répétition des éléments

J'ai un répéteur qui est construit comme suit:

 <asp:Repeater runat="server" ID="rptItems" OnItemDataBound="rptItems_ItemDataBound">
            <ItemTemplate>
            <div class="span12 grey-box">
                        <div class="hero-block3">
                            <div class="row show-grid">
                                <div class="span9">
                                    <div class="hero-content-3">
                                        <h2><asp:Literal ID="ltrName" runat="server"></asp:Literal></h2>
                                        <p><asp:Literal ID="ltrDescription" runat="server"></asp:Literal></p>
                                    </div>
                                </div>
                                <div class="span3">
                                <asp:Panel ID="pnlAmount" runat="server">
                                    <div class="tour-btn" id="divAmount" runat="server">
                                        <small>How Many?<br /></small>
                                        <asp:TextBox runat="server" ID="tbox" Width="40"></asp:TextBox>
                                    </div>
                                    </asp:Panel>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="clear-both"></div>
                    <br />

            </ItemTemplate>
        </asp:Repeater>

Il est relié à l'aide de:

  ListProducts = db.GetDataTable("select * from Products where Id in (" + selectedValues + ")");

        rptItems.DataSource = ListProducts;
        rptItems.DataBind();

Et puis des trucs supplémentaires est fait avec:

protected void rptItems_ItemDataBound(object sender,
                                  System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
        DataRowView nRow = null;

        switch (e.Item.ItemType)
        {
            case ListItemType.Item:
            case ListItemType.AlternatingItem:
                nRow = (DataRowView)e.Item.DataItem;
                ((Literal)e.Item.FindControl("ltrDescription")).Text = "" + nRow["Description"];
                ((Literal)e.Item.FindControl("ltrName")).Text = "" + nRow["Name"];

                if ("" + nRow["HasAmount"] == "False")
                {
                    ((Panel)e.Item.FindControl("pnlAmount")).Visible = false;
                }

                break;
        }
    }

Cependant, maintenant, sur un événement onclick pour la page, je vais essayer d'enregistrer les informations stockées - c'est Ce que j'ai fait jusqu'à présent, mais il a toujours tout semble être nulle, et je ne peux pas ajouter un .texte etc, à la fin de la (TextBox)item.FindControl("tbSelected");

Heres ma boucle, je vais essayer sur cliquez sur:

protected void doStageThree(object sender, EventArgs e)
        {
            foreach (RepeaterItem item in rptItems.Items)
            {
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    var tbSelected = (TextBox)item.FindControl("tbSelected");
                    var lblDescription = (Literal)item.FindControl("ltrDescription");
                    var lblName = (Literal)item.FindControl("ltrName");

                }
            }
        }
Essayez le "foreach (Contrôle c dans rptItemss.Les éléments)" au lieu de RepeaterItems, puis ((zone de texte)c.FindControl("tbSelected")).Texte
Qui ressemble à cela pourrait fonctionner, comment pourrais-je protéger si (TextBox)c.FindControl("tbSelected") est nul (il est maintenant toujours affiché)
var texte = (c.FindControl("tbSelected")== null ? "Vides" : ((zone de texte)c.FindControl("tbSelected")).Texte; Jouer avec le débogueur et voir ce qui fonctionne

OriginalL'auteur TMB87 | 2013-05-17