2

私はウェブサイトを作成していますが、次の問題に直面しています。私は2つのListViewを持っています。最初の 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>

名前だけを表示する必要があります。

2 番目のリストビューは 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。

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 を保持するための非表示フィールドを item-template に追加します。

<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 に答える