2012-06-27 42 views
2

我正在創建一個網站,並面臨以下問題。我有2個ListViews。 第一個ListView的是稱爲Sidebar.ascx用戶控件內:在ListView中獲取對象的數據庫ID並從用戶控件更新ListView ListView

<asp:ListView ID="sidebarListView" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSourceSidebar"> 
<ItemTemplate> 
    <div class="sidebarItem" runat="server"> 
    <div> 
     <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' /> 
    </div> 
    </div> 
</ItemTemplate> 
<LayoutTemplate> 
    <div class="sidebarMain"> 
    <asp:PlaceHolder runat="server" ID="itemPlaceHolder" /> 
    </div> 
</LayoutTemplate> 
</asp:ListView> 

<asp:SqlDataSource ID="SqlDataSourceSidebar" runat="server" ConnectionString="<%$ ConnectionStrings:TudengiDBConnectionString %>" SelectCommand="SELECT [Id], [Name] FROM [Faculties] ORDER BY [Name]"></asp:SqlDataSource> 

它僅顯示姓名。

第二列表視圖是我的Default.aspx

<asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
    <asp:ListView ID="RecentItemsListView" runat="server" DataSourceID="SqlDataSource1" 
     GroupItemCount="3"> 
     <LayoutTemplate> 
      <div class="recentItemsMain"> 
       <asp:PlaceHolder runat="server" ID="groupPlaceHolder" /> 
      </div> 
      <asp:DataPager ClientIDMode="Static" ID="DataPager1" runat="server" PageSize="9"> 
       <Fields> 
       <asp:NumericPagerField /> 
       </Fields> 
      </asp:DataPager> 
     </LayoutTemplate> 
     <GroupTemplate> 
      <div class="recentItems"> 
       <asp:PlaceHolder runat="server" ID="itemPlaceHolder" /> 
      </div> 
     </GroupTemplate> 
     <ItemTemplate> 
      <div class="recentItem" runat="server"> 
       <div> 
       <asp:Image ID="PictureThumb" runat="server" ImageUrl='<%#CreateThumbnail((string)Eval("Picture"),130,130) %>' /> 
       </div> 
       <asp:Label ID="AuthorLabel" runat="server" Text='<%# Eval("Author") %>' /> 
       <div> 
       <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' /> 
       </div> 
      </div> 
     </ItemTemplate> 
     <GroupSeparatorTemplate> 
      <div class="groupSeparator"> 
      </div> 
     </GroupSeparatorTemplate> 
    </asp:ListView> 

    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TudengiDBConnectionString %>" SelectCommand="SELECT [Id], [Name], [Faculty_Id], [User_Id], [Author], [Picture], [Location] FROM [Books] ORDER BY [DateAdded] DESC"> 

我需要的是Default.aspx中ListView中沒有一個WHERE子句來顯示數據,但裏面的時候在Sidebar用戶控件中單擊一個項目我需要更新Default.aspx ListView以僅顯示[Faculty_Id] =用戶控件中ListView項目的ID的數據。

當我只能顯示名稱字段時,如何獲取ListView對象的數據庫ID?我是否也必須顯示ID,然後隱藏用戶列? 解決這種情況的正確方法是什麼?

感謝您的幫助

回答

1
<asp:ListView ID="sidebarListView" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSourceSidebar" OnItemCommand="sidebarListView_ItemCommand"> 
<ItemTemplate> 
    <div class="sidebarItem" runat="server"> 
    <div> 
     <asp:LinkButton ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' CommandName="Select" CommandArgument='<%# Eval("Id") %>' /> 
    </div> 
    </div> 
</ItemTemplate> 

這是我結束了。

+0

您應該將其標記爲答案。在SO中鼓勵回答你自己的問題(並記錄你的努力)。 – Channs

+0

感謝您的鼓勵,但它說「您可以在兩天內接受您的答案」。那就是當我這樣做的時候:) – JoonasL

0

你可以做的是將屬性添加到NameLabel控制。 說它例如myID

<asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' myID='<%# Eval("ID") %>'/> 

然後從你的代碼訪問的屬性,讓您的ID:

string ID = NameLabel.Attributes["myID"]; 
0

一個隱藏字段添加到您的項目模板保存在數據庫ID。

<ItemTemplate> 
    <asp:HiddenField ID="hdnFacultyID" runat="server" Value='<%# Eval("FacultyID") %>' /> 
    <div class="recentItem" runat="server"> 
    ... 
    </div> 
</ItemTemplate> 

在適當的ListView處理程序中,您可以像這樣訪問數據庫ID。

((HiddenField)e.item.FindControl("hdnFacultyID")).Value 
相關問題