2011-05-25 111 views
1

我的頁面中有兩個dropdownlist,一個detailsview和一個formview控件。第一個下拉列表包含書籍類別列表,第二個下拉列表包含基於第一個下拉列表的選定值的書籍列表,最後是顯示詳細信息第二個下拉列表的詳細信息視圖。另一方面,formview沒有任何控制權,我只是使用它從detailsview中獲取值,以便根據第二個選定的下拉列表插入記錄。所以我想要做的就是隱藏formview,如果第二個dropdownlist是空的。當從下拉列表中未選擇任何值時隱藏/顯示formview

它有點不清楚,但爲了縮短事情我只想隱藏formview,如果在第二個dropdownlist中沒有選擇任何值(並顯示是否存在)。

我附上我的示例代碼。我希望你能理解。

預先感謝

<p> 
     Book Reservation</p> 
    <p> 
     <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" 
      AutoPostBack="True" DataSourceID="categoryDataSource" DataTextField="name" 
      DataValueField="categoryid" > 
      <asp:ListItem Selected="True" Value="">-- Choose a category --</asp:ListItem> 
     </asp:DropDownList> 
     <asp:SqlDataSource ID="categoryDataSource" runat="server" 
      ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
      SelectCommand="SELECT [categoryid], [name] FROM [TblCategory]" > 
     </asp:SqlDataSource> 
    </p> 
    <p> 
     <asp:DropDownList ID="DropDownList2" runat="server" 
      AutoPostBack="True" DataSourceID="booktitleDataSource" 
      DataTextField="booktitle" DataValueField="bookid" OnDataBound="DetailsView1_DataBound" > 
     <asp:ListItem Selected="True" Value="-1">-- Choose a book --</asp:ListItem> 
     </asp:DropDownList> 

     <asp:SqlDataSource ID="booktitleDataSource" runat="server" 
      ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
      SelectCommand="SELECT [bookid], [booktitle], [categoryid] FROM [TblBooks] WHERE ([categoryid] = @categoryid)"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="DropDownList1" Name="categoryid" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
    </p> 
    <p> 
     <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
      DataKeyNames="bookid" DataSourceID="bookdetailsDataSource" > 
      <HeaderTemplate> 
      <b>BOOK DETAILS</b> 
      </HeaderTemplate> 

      <FooterTemplate> 
      <b>RESERVED BY</b> 
      <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
      AutoGenerateColumns="False" DataKeyNames="reservationid" 
      DataSourceID="reserveDataSource"> 
      <Columns> 
      <asp:BoundField DataField="EmployeeID" HeaderText="Employee PIN" 
        SortExpression="EmployeeID" /> 

      <asp:BoundField DataField="reservedate" HeaderText="Reserve date" 
        SortExpression="reservedate" /> 
      </Columns> 
      </asp:GridView> 
      <asp:SqlDataSource ID="resereDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
      SelectCommand="SELECT dbo.BookReservation.reservationid,dbo.BookReservation.bookid, dbo.BookReservation.EmployeeID, 
      dbo.BookReservation.reservedate, dbo.BookReservation.isapproved, dbo.BookReservation.reschedule, dbo.BookReservation.isdeleted, 
      dbo.TblBooks.booktitle FROM dbo.BookReservation INNER JOIN dbo.TblBooks ON dbo.BookReservation.bookid = dbo.TblBooks.bookid WHERE (dbo.BookReservation.isdeleted IS NULL) OR (dbo.BookReservation.deleted = 0)"> 

      </asp:SqlDataSource> 
      </FooterTemplate> 
      <Fields> 
       <asp:BoundField DataField="bookid" HeaderText="ISBN" ReadOnly="True" 
        SortExpression="bookid" /> 
       <asp:BoundField DataField="booktitle" HeaderText="Title" 
        SortExpression="booktitle" /> 
       <asp:BoundField DataField="lastname" HeaderText="Author" 
        SortExpression="lastname" /> 
       <asp:BoundField DataField="firstname" HeaderText="" 
        SortExpression="firstname" /> 
       <asp:BoundField DataField="description" HeaderText="Description" 
        SortExpression="description" /> 
       <asp:BoundField DataField="name" HeaderText="Category" 
        SortExpression="name" /> 
       <asp:BoundField DataField="quantity" HeaderText="Quantity" 
        SortExpression="quantity" /> 
       <asp:BoundField DataField="dateadded" HeaderText="Date added" 
        SortExpression="dateadded" /> 
       <asp:CheckBoxField DataField="isdeleted" HeaderText="Deleted" 
        SortExpression="isdeleted" /> 
      </Fields> 
     </asp:DetailsView> 
     <asp:SqlDataSource ID="bookdetailsDataSource" runat="server" 
      ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
      SelectCommand="SELECT dbo.TblBooks.bookid, dbo.TblBooks.booktitle, dbo.TblBooks.lastname, dbo.TblBooks.firstname, dbo.TblBooks.description, dbo.TblBooks.categoryid, dbo.TblBooks.dateadded, dbo.TblBooks.statusid, dbo.TblBooks.quantity, dbo.TblBooks.isdeleted, dbo.BookStatus.statusname, dbo.TblCategory.name, dbo.LendTable.EmployeeID, dbo.LendTable.dateborrowed, dbo.LendTable.expdateofreturn, dbo.LendTable.datereturned FROM dbo.TblBooks INNER JOIN dbo.TblCategory ON dbo.TblBooks.categoryid = dbo.TblCategory.categoryid INNER JOIN dbo.BookStatus ON dbo.TblBooks.statusid = dbo.BookStatus.statusid INNER JOIN dbo.LendTable ON dbo.TblBooks.bookid = dbo.LendTable.bookid WHERE (dbo.TblBooks.bookid = @bookid) "> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="DropDownList2" Name="bookid" 
        PropertyName="SelectedValue" Type="Int64" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
    </p> 
    <p> 
     <asp:FormView ID="FormView1" runat="server" DataKeyNames="reservationid" 
      DataSourceID="reserveDataSource" DefaultMode="Insert" 
      OnDataBound="FormView1_DataBound" > 

      <EditItemTemplate> 
       reservationid: 
       <asp:Label ID="reservationidLabel1" runat="server" 
        Text='<%# Eval("reservationid") %>' /> 
       <br /> 
       bookid: 
       <asp:TextBox ID="bookidTextBox" runat="server" Text='<%# Bind("bookid") %>' /> 
       <br /> 
       EmployeeID: 
       <asp:TextBox ID="EmployeeIDTextBox" runat="server" 
        Text='<%# Bind("EmployeeID") %>' /> 
       <br /> 
       reservedate: 
       <asp:TextBox ID="reservedateTextBox" runat="server" 
        Text='<%# Bind("reservedate") %>' /> 
       <br /> 
       <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" 
        CommandName="Update" Text="Update" /> 
        &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" 
        CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 
      </EditItemTemplate> 

      <InsertItemTemplate> 

       Reserve date: 
       <asp:TextBox ID="reservedateTextBox" runat="server" 
        Text='<%# Bind("reservedate") %>' /> 
       <a href="#" onclick="cdp1.showCalendar(this, 'ctl00$ContentPlaceHolder1$FormView1$reservedateTextBox'); return false;">Date Picker</a> 
       <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="reservedateTextBox" ErrorMessage="* " ValidationGroup="reservebook"> 
       </asp:RequiredFieldValidator> 
       <br /> 

       <asp:Button ID="InsertButton" runat="server" CausesValidation="True" 
        CommandName="Insert" Text="Insert" /> 
        &nbsp;<asp:Button ID="InsertCancelButton" runat="server" 
        CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 

       <%--ISBN:--%> 
       <asp:TextBox ID="bookidTextBox" runat="server" Visible="false" 
        Text='<%# Bind("bookid") %>' /> 
       <br /> 
       <%--Employee PIN:--%> 
       <asp:TextBox ID="EmployeeIDTextBox" runat="server" Visible="false" 
        Text='<%# Bind("EmployeeID") %>' /> 
       <br /> 

      </InsertItemTemplate> 

回答

2

1)設置FromView Visible="False"最初,從標記。 2)分配給OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged"和DropDownList2設置其AutoPostBack="True"

3)後面的代碼中添加此:

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if(!DropDownList2.SelectedValue.Equals("-1")) 
     FromView1.Visible=true; 
    else 
     FromView1.Visible=false; 
} 
+0

的SelectedValue不SelectedIndex的? – jmoreno 2011-05-25 01:57:36

+1

更好地使用SelectedValues,因爲索引可能會改變,你可能會得到別的東西來代替你的0元素。但無論「 - 選擇一本書 - 」元素在列表中的哪個位置都會有「-1」值,並且無論索引如何,您都將希望隱藏FormView(如果選擇了該項目)。永遠不要以爲它會一直保持在0的位置,在編程時絕不會假設任何東西:) – Dimitri 2011-05-25 02:01:48

+0

謝謝我馬上試試 – Loupi 2011-05-25 02:33:14

相關問題