2012-07-29 3 views
2

У меня есть две таблицы, в которых хранятся элементы и предметы, элемент будет иметь разные размеры. Я пытаюсь отобразить элементы для элемента в раскрывающемся списке с помощью datalist. мой HTML, как показано нижеКак связать выпадающий список, который находится внутри поля itemtemplate элемента управления datalist

<asp:DataList ID="dlstCartItems" runat="server" RepeatDirection="Horizontal" RepeatColumns="5" 
        Width="580px" ForeColor="Blue" DataKeys="ItemCode" 
        onitemdatabound="dlstCartItems_ItemDataBound"> 
        <ItemTemplate> 
         <table cellpadding="0" cellspacing="0" style="border: Solid 2px #eeeeee;"> 
          <tr> 
           <td align="left" style="width: 180px;"> 
            <a href="Videos.aspx?vid=<%# Eval("itemid") %>"> 
             <img src="images/Gallery/<%# Eval("imagename") %>" alt="Image" height="120px" width="185px" 
              style="border: 0;" /> 
            </a> 
           </td> 
          </tr> 
          <tr> 
           <td style="width: 180px;" align="left"> 
            <table> 
             <tr> 
              <td> 
               Name: 
              </td> 
              <td> 
               <a href="Videos.aspx?vid=<%# Eval("itemid") %>"> 
                <asp:Label ID="lblVideoName" runat="server" Text='<%# Eval("name")%>' ForeColor="#06C"></asp:Label> 
               </a> 
              </td> 
             </tr> 
             <tr> 
              <td> 
               Author: 
              </td> 
              <td> 
               <a href="Videos.aspx?Authorid=<%# Eval("itemid") %>"> 
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("thm") %>' ForeColor="#06C"></asp:Label></a> 
              </td> 
             </tr> 
             <tr> 
              <td> 
               Technology: 
              </td> 
              <td> 
               <a href="Videos.aspx?Techid=<%# Eval("itemid") %>"> 
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("itemcode") %>' ForeColor="#06C"></asp:Label></a> 
              </td> 
             </tr> 
            </table> 
           </td> 
          </tr> 
          <tr> 
           <td> 

            <asp:DropDownList ID="ddlAvailableSizes" runat="server" > 
            </asp:DropDownList> 
           </td> 
          </tr> 
         </table> 
        </ItemTemplate> 
        <%--<AlternatingItemStyle BackColor="Silver" />--%> 
        <ItemStyle BackColor="#eeeeee" /> 
       </asp:DataList> 

This is my bind method 

var query = (from b in db.CR_CartItems 
         join c in db.CR_CartItems_Sizes on b.ItemCode equals c.ItemCode 
         join k in db.CR_ScrollingMenus on b.ThemeID equals k.MenuID 

         where b.status == true 
         orderby b.updatedat descending 
         select new 
         { 
          itemid = b.Itemid, 
          imagename = b.galleryimg, 
          itemcode = b.ItemCode, 
          thm = k.DisplayName, 
          name = b.posterName 

         }).Distinct(); 
      foreach (var q in query) 
      { 

       var query1 = from b in db.CR_CartItems_Sizes 
          join c in db.CR_CartItems on b.ItemCode equals c.ItemCode 
          where b.ItemCode == q.itemcode 
          select new 
          { 
           b.SizeDesc, 
           b.ItemCode 
          }; 

       foreach (DataListItem li in dlstCartItems.Items) 
       { 
        DropDownList list = (DropDownList)li.FindControl("ddlAvailableSizes"); 
        list.DataSource = query1; 
        list.DataTextField = "SizeDesc"; 
        list.DataValueField = "ItemCode"; 
        list.DataBind(); 
        list.Items.Insert(0, "Available Sizes"); 
       } 


      } 
      dlstCartItems.DataSource = query; 
      dlstCartItems.DataBind(); 
     } 

я установил точку останова в цикле Еогеаспа и проверил, не входя в петле. любая помощь приветствуется.

ответ

1

Вы должны обрабатывать DataList.ItemDataBound событие:

Предполагая, что вы сшиваться DataList как: (или аналогичный, с помощью элемента управления источником данных)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     this.dl.DataSource = GetDataSource(); 
     this.dl.DataBind(); 
    } 
} 

Тогда ваш ItemDataBound обработчик будет выглядеть следующим образом:

protected void dl_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var myDropDownList = e.Item.FindControl("YourDropDownListID") as DropDownList; 
     int currentItemID = int.Parse(this.dl.DataKeys[e.Item.ItemIndex].ToString()); 

     myDropDownList.DataSource = GetDDLDataSource(currentItemID); 
     myDropDownList.DataBind(); 
    } 
} 

Наконец, не забудьте зарегистрировать событие в разметке DataList

<asp:DataList ID="dl" runat="server" 
     onitemdatabound="dl_ItemDataBound" 
     DataKeyField="Your_Row_ID" 
    > 
+0

http://www.colourrain.com/koeb-plakater-kunst – Tan

+0

выше код, предоставленный Вами добавит те же поля для всех DropDownLists, мое требование, как по ссылке выше. если элемент изображения имеет два конкретных размера в базе данных, он должен разослать только два, и если он имеет только 4, то 4. – Tan

+0

Это не так сложно, на самом деле код, который я предоставил, просто показал вам пример, я просто обновил его до извлеките идентификатор строки текущего элемента и используйте его для фильтрации правильного источника данных для каждой строки. ** Этот код должен быть достаточным, чтобы указать вам в правильном направлении **. Если у вас есть еще вопросы, пожалуйста, дайте мне знать. – Jupaol

Смежные вопросы