2012-06-27 29 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