2

我正在创建一个网站,并面临以下问题。我有 2 个列表视图。第一个 ListView 位于名为 Sidebar.ascx 的用户控件中:

<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 子句的情况下显示数据,但是当在侧边栏用户控件中单击项目时,我需要更新 Default.aspx ListView 以仅显示 [Faculty_Id] 所在的数据= 用户控件中 ListView 项的 ID。

当我只能显示 NAME 字段时,如何获取 ListView 对象的数据库 ID?我是否也必须显示 ID,然后对用户隐藏该列?解决这种情况的正确方法是什么?

感谢您的帮助

4

3 回答 3

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>

这就是我最终的结果。

于 2012-06-27T15:46:30.067 回答
0

您可以做的是向NameLabel控件添加一个属性。例如调用它myID

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

然后从您的代码中访问该属性以获取您的 ID:

string ID = NameLabel.Attributes["myID"];
于 2012-06-27T13:39:12.147 回答
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
于 2012-06-27T13:52:27.527 回答