2009-07-17 8 views
0

Il semble que j'utilise la liaison de données asp.net depuis si longtemps que j'ai oublié certaines notions de base.Utilisation de contrôles ASP.NET sans liaison de données

Je crée dynamiquement une table dans une page ASPX sans liaison de données.

foreach (XXX x in TTTT){ %> 
     <tr> 
      <td><%=x.val %></td> 
       <asp:ImageButton runat="server" CommandName="uiImgResolve_Click" 
       CommandArgument='<%=X.pkid%>' ImageUrl="../images/IMG.png"/> 
    <% } %> 

Comme vous pouvez le voir sans doute que je ne peux pas utiliser le RUNAT = Server ou si je je ne peux pas spécifier un identifiant pour la ligne. Ceci est juste un exemple simple de ce que je tente de faire est beaucoup plus complexe et n'est pas propice à la databiding. Dans ASP classique, nous appelions simplement une méthode JS, puis soumettons le formulaire avec le PKID intégré dans un champ caché. Comme il est dit, je suis très familier avec tous les contrôles .net et les utiliser souvent, dans ce cas, ce n'est pas l'outil correct.

+1

ne peut pas vous utiliser le contrôle Repeater. De cette façon, cela pourrait créer beaucoup plus de problèmes. Je vous suggère d'utiliser la conception correcte de asp.net qui résoudra votre problème (ou il y aura un moyen dans asp.net design de le résoudre d'une autre manière). Si vous pouvez expliquer plus sur le scénario que vous dans je peux comprendre et je vais essayer de vous suggérer. –

+1

Recherche sur le contrôle de répétition. Voyez si cela pourrait vous aider. –

Répondre

0

Je suggérerais un contrôle listview. Quelque chose comme ceci:

<asp:ListView ID="lvImages" runat="server" OnItemDataBound="lvImages_ItemDataBound"> 
    <LayoutTemplate> 
     <table class="tblImages" cellpadding="0" cellspacing="0"> 
      <tr class="ImageHeaderRow"> 
       <td>Imagename</td> 
       <td>Image</td> 
       <td>Location</td> 
      </tr> 
      <asp:PlaceHolder ID="itemContainer" runat="server"></asp:PlaceHolder> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr> 
      <asp:literal ID="ltrCell1" runat="server" /> 
      <td><asp:ImageButton ID="imgMyImage" runat="server" /></td> 
      <td><asp:Label ID="lblLocation" runat="server" ></asp:Label></td> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 

code derrière:

protected void lvImages_ItemDataBound(object sender, ListViewItemEventArgs e) { 
      if (e.Item.ItemType == ListViewItemType.DataItem) { 
       ListViewDataItem currentItem = (ListViewDataItem)e.Item; 
       MyImageObject oImg = (MyImageObject)currentItem.DataItem; 


       Literal ltrCell1 = e.Item.FindControl("ltrCell1") as Literal; 
       ImageButton imgMyImage = e.Item.FindControl("imgMyImage") as ImageButton ; 
       Label lblLocation= e.Item.FindControl("lblLocation") as Label; 
       ltrCell1.text = string.format(@"<td id=""{0}"">{1}</td>", oImg.id, oImg.val); 
       imgMyImage.CommandArgument = oImg.arg; 
       imgMyImage.CommandName = "cmdNAme"; 
       imgMyImage.ImageUrl = oImg.URL; 

} 

Bonne chance!

1

Vous pouvez transmettre les paramètres par chaîne de requête.
quelque chose comme ceci:

foreach (XXX x in TTTT){ %> 
    <tr> 
     <td><%=x.val %></td> 
      <a href='?Action=Resolve&pkid=<%=X.pkid%>'> 
       <img src='../images/IMG.png' /> 
      </a> 
<% } %> 
Questions connexes