Avatar billede donpedro Nybegynder
28. maj 2006 - 22:28 Der er 13 kommentarer og
1 løsning

Filtrering med flere dropdownlister

Hej Alle,

Jeg er igang med at lave et lille projekt i ASP.NET 2.0 (faktisk mit første). Jeg bruger Visual Web Developer 2005 Express Ed., og det er jo fantastisk hvilke værktøjer der stilles til rådighed - men jeg har altså brug for lidt hjælp til at få det sidste på plads.

Jeg har en AccessDB som jeg viser i en ASPX-fil via GridView og DetailView componenterne. Som en ekstra feature kunne jeg godt tænke mig at sortere og filtrere flere af databasefelterne via dropdownlister (som evt. henter deres værdier dynamisk fra DB'en).

Hvordan gør jeg det? Hvis det er til nogen hjælp poster jeg gerne kildekoden?!?

/Peter
Avatar billede donpedro Nybegynder
30. maj 2006 - 15:04 #2
Det kunne sagtens være noget, men det koster jo penge at se denne video...kender du lignende links, der ikke koster noget?

/Peter
Avatar billede snepnet Nybegynder
30. maj 2006 - 15:40 #3
Du får en gratis istedet :o)
Mvh
Avatar billede donpedro Nybegynder
30. maj 2006 - 18:04 #4
Ville bare være dejligt ;o)

/Peter
Avatar billede snepnet Nybegynder
31. maj 2006 - 20:12 #5
Utroligt.... Så glemmer jeg at smide linket med - det må du altså meget undskylde :o(
http://msdn2.microsoft.com/en-US/library/ms227680.aspx
Mvh
Avatar billede donpedro Nybegynder
03. juni 2006 - 01:11 #6
Det gør ikke spor...men du kan hjælpe mig med denne her. Eksemplet fra ovenstående link virker fint, men hvis jeg prøver at koble endnu et sorteringsfelt på går det galt. Hvad gør jeg forkert. Her er koden:

<%@ Page language="VB" %>

<html>
  <body>
    <form id="Form1" RunAt="server">
       
      <h3>Northwind Employees</h3>

        <table cellspacing="10">           
          <tr>
            <td valign="top">
              <table border=0>
                <tr>
                  <td valign="top">Country</td>
                  <td><asp:DropDownList runat="server" id="CountryListBox" AppendDataBoundItems="True"
                                        DataSourceID="CountrySqlDataSource"
                                        DataTextField="Country" DataValueField="Country" >
                        <asp:ListItem Selected="True" >(Show All)</asp:ListItem>
                      </asp:DropDownList>
                  </td>
                </tr>
                  <tr>
                      <td valign="top">
                          Adress</td>
                      <td>
                          <asp:DropDownList runat="server" id="AdressListBox" AppendDataBoundItems="True"
                                        DataSourceID="AdressSqlDataSource"
                                        DataTextField="Adress" DataValueField="Adress" >
                        <asp:ListItem Selected="True" >(Show All)</asp:ListItem>
                      </asp:DropDownList></td>
                  </tr>
                <tr>
                  <td>Last Name</td>
                  <td><asp:TextBox runat="server" id="LastNameTextBox" Text="*" /></td>
                </tr>
                <tr>
                  <td></td>
                  <td><asp:Button runat="server" id="FilterButton" Text="Filter Results" /></td>
                </tr>
              </table>
            </td>

            <td valign="top">               
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
                    DataKeyNames="EmployeeID" DataSourceID="EmployeeDetailsSqlDataSource" ForeColor="#333333"
                    GridLines="None">
                    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <Columns>
                        <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False"
                            ReadOnly="True" SortExpression="EmployeeID" />
                        <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                        <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                        <asp:BoundField DataField="Adress" HeaderText="Adress" SortExpression="Adress" />
                        <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
                    </Columns>
                    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                    <EditRowStyle BackColor="#999999" />
                    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                </asp:GridView>
            </td>               
          </tr>           
        </table>
           
        <asp:SqlDataSource ID="CountrySqlDataSource"
          SelectCommand="SELECT DISTINCT Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
          RunAt="server" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" />
       
        <asp:SqlDataSource ID="AdressSqlDataSource"
          SelectCommand="SELECT DISTINCT Adress FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
          RunAt="server" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" />

        <asp:SqlDataSource ID="EmployeeDetailsSqlDataSource"
          SelectCommand="SELECT * FROM [Employees]"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
          FilterExpression="Country LIKE '{0}' AND Adress LIKE '{1}' AND LastName LIKE '{2}'"
          RunAt="server" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" />

          <FilterParameters>
            <asp:ControlParameter ControlID="CountryListBox"  PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="AdressListBox"  PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="LastNameTextBox" PropertyName="Text" />
          </FilterParameters>
        </asp:SqlDataSource>
      </form>
  </body>
</html>
Avatar billede snepnet Nybegynder
03. juni 2006 - 09:10 #7
Her afslutter du din datasource:
RunAt="server" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" />
Du skal bare fjerne / - så du har:
RunAt="server" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" >
så vil jeg tro det går (ellers må du lige skrive lidt mere om hvad fejlen er).
Mvh
Avatar billede snepnet Nybegynder
03. juni 2006 - 09:31 #8
Og hey ... dit adressefelt... den går ikke. Du må ændre
adress til
address
Mvh
Avatar billede donpedro Nybegynder
19. juni 2006 - 22:25 #9
Nu er den næsten på plads, men jeg skal lige have lidt hjælp til min FilterExpression.

Jeg har 2 dropdownlister, som henter filterværdier fra databasen. De fundne værdier vises når man trykker på en filtreringsknap. Problemet er, at jeg gerne ville have dropdownlisterne både til at fungere uafhængigt og sammen. Det vil sige, at hvis man vælger en værdi i første dropdown og lader anden dropdown urørt og trykker på knappen, findes værdier der matcher. Lader man værdien fra før stå i første dropdown stå og vælger en værdi fra anden dropdown og trykker på knappen findes værdier inden for angivne parametrer...er det forståligt?!? Denne funktion løser min nuværende FilterExpression ikke. Hvordan laver jeg det om?

Min kode ser ud som følger:

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <br />
        <strong>Country &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;City</strong><br />
        <asp:DropDownList runat="server" id="CountryListBox" AppendDataBoundItems="True"
        DataSourceID="CountrySqlDataSource"
        DataTextField="Country" DataValueField="Country" >
        <asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
        </asp:DropDownList>
       
        <asp:DropDownList runat="server" id="CityListBox" AppendDataBoundItems="True"
        DataSourceID="CitySqlDataSource"
        DataTextField="City" DataValueField="City" >
        <asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
        </asp:DropDownList>
        <asp:Button runat="server" id="FilterButton" Text="Filter Results" /><br />
        <br />
       
        <asp:GridView ID="EmployeesGridView"
        DataSourceID="EmployeeDetailsSqlDataSource"
        AutoGenerateColumns="False"
        AllowSort="True"
        RunAt="server" Width="800px" CaptionAlign="Left" HorizontalAlign="Left">
               
        <HeaderStyle backcolor="Navy" forecolor="White"/>
        <RowStyle backcolor="White"/>
        <AlternatingRowStyle backcolor="LightGray"/>
        <EditRowStyle backcolor="LightCyan"/>
             
        <Columns>                 
            <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False"
                ReadOnly="True" SortExpression="EmployeeID" />
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
        </Columns>               
        </asp:GridView>

          <asp:SqlDataSource ID="CountrySqlDataSource"
          SelectCommand="SELECT DISTINCT Country FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NORTHWINDConnectionString %>"
          RunAt="server" ProviderName="<%$ ConnectionStrings:NORTHWINDConnectionString.ProviderName %>" />
         
          <asp:SqlDataSource ID="CitySqlDataSource"
          SelectCommand="SELECT DISTINCT City FROM Employees"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NORTHWINDConnectionString %>"
          RunAt="server" ProviderName="<%$ ConnectionStrings:NORTHWINDConnectionString.ProviderName %>" />

        <asp:SqlDataSource ID="EmployeeDetailsSqlDataSource"
          SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [Country], [City] FROM [Employees]"
          EnableCaching="True"
          CacheDuration="60"
          ConnectionString="<%$ ConnectionStrings:NORTHWINDConnectionString %>"
          FilterExpression="Country LIKE '{0}' AND City LIKE '{1}'"
          RunAt="server" ProviderName="<%$ ConnectionStrings:NORTHWINDConnectionString.ProviderName %>">

          <FilterParameters>
            <asp:ControlParameter ControlID="CountryListBox"  PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="CityListBox" PropertyName="SelectedValue" />
          </FilterParameters>
        </asp:SqlDataSource>



    </div>
    </form>
</body>
</html>
Avatar billede donpedro Nybegynder
20. juni 2006 - 19:43 #10
Snepnet: Post lige et svar, så giver jeg dig point.

Du løste jo første del af mit problem. Jeg forventer ikke du løser resten af problemet :o)

/Peter
Avatar billede snepnet Nybegynder
28. juni 2006 - 23:01 #11
Undskyld ventetiden ... har ikke været online i et stykke tid.
Har du stadig problemer med det?
Mvh
Avatar billede donpedro Nybegynder
29. juni 2006 - 08:40 #12
Ja, jeg har stadig problemer. Jeg er nærmest kørt fast...status er som jeg skriver i posten ovenfor...håber da du lige sidder med en mulig idé...
Avatar billede snepnet Nybegynder
04. juli 2006 - 01:25 #13
Du må gøre det programmatisk i noget C# kode.... I eventhandleren for klikeventet på knappen må du lave dit filterudtryk afhængigt af hvad der er sket på siden.
Mvh
Avatar billede snepnet Nybegynder
04. juli 2006 - 01:25 #14
(eller VB self :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester