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
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
Vous devez vous connecter pour publier un commentaire.
Il est toujours null, car il n'y a pas de
TextBox
avec l'idtbSelected
le modifier:
Pour protéger votre code d'null utilisation de mots clés
as
:Cependant, en disant que - tbselected toujours = ""
Vérifiez si vous n'êtes pas reliaison de votre répéteur à l'intérieur de
Page_Load
aprèsPostBack
événement comme il va effacer toutes les valeurs, il arrive très souvent 🙂Que faire si j'ai plus d'une des zones de texte (peut-être 10) et je tiens à ajouter certaines zones de texte à une liste?
OriginalL'auteur gzaxx
Essayez de remplacer
avec
OriginalL'auteur Mikey Mouse