2016-04-13 2 views
1

Ich habe eine Gridview (GridView1), die mit 4 DropDownLists gefiltert werden muss Momentan versuche ich nur nach den ersten beiden Auswahlen zu filtern.Filtering Gridview mit SQL & cmd.Parameters

DdlVendor DdlStore

Ich bin es erreichen, indem Sie eine SQL-Abfrage mit

 string query = "Select DISTINCT *, dbo.getsource(version, store_account) as source " + 
         " FROM TABLENAME " + 
         " WHERE ([email protected] or @name = '') " + 
         " and ([email protected] or @Sname = '') " + 
         " and canceled = 0 " + 
         " and (trans_date between @start and @end) and User_id not in (45493,43020,45491) and internal_use = 0 " + 
         " order by " + sort + " "; 

Der Filter derzeit alle Prüfaufträge von uns gesendet nimmt, wenn Sie sich fragen, was all die zusätzlichen Spielereien ist.

using (SqlCommand cmd = new SqlCommand(query)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
      { 
       cmd.Connection = con; 
       using (DataTable dt = new DataTable()) 
       { 
        cmd.Parameters.AddWithValue("@name", DdlVendor.SelectedIndex > 0 ? DdlVendor.SelectedValue : ""); 
        cmd.Parameters.AddWithValue("@Sname", DdlStore.SelectedIndex > 0 ? DdlStore.SelectedValue : ""); 
        cmd.Parameters.AddWithValue("@start", start); 
        cmd.Parameters.AddWithValue("@end", end); 
        sda.Fill(dt); 
        GridView1.DataSource = dt; 
        GridView1.DataBind(); 

@Name und @Sname sind, was ich für die ersten beiden Dropdownlists bin mit. Das Problem ist, wenn ich fertig bin, meine Werte zu wählen und sie anzuwenden, wird das GridView ohne Fehler leer.

Ziel ist es, das, was Sie in der Gridview sehen, anhand der Werte zu filtern, die in jeder Dropdown-Liste ausgewählt sind.

Ich werde alle Fragen, die Sie haben, zu den besten meiner Fähigkeiten klären.

Hier ist eine meiner Dropdownlists

<asp:DropDownList ID="DdlVendor" AppendDataBoundItems="True" runat="server" CssClass="form-control ftxt" PropertyName="SelectedValue" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="Dist_num" AutoPostBack="True"> 
      <asp:ListItem Text="ALL" Value=""/> 
     </asp:DropDownList> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DATABASE %>" SelectCommand="SELECT DISTINCT [Name], [Dist_num] FROM [VIEWNAME]"></asp:SqlDataSource> 

Hier ist meine Gridview mit einem Boundfield als Beispiel

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" Width="100%" CssClass="main-table" AutoGenerateColumns="False"> 

<asp:BoundField DataField="Name" HeaderText="Vendor" ItemStyle-Width="80px" SortExpression="Name" /> 
+1

Wenn ein Gridview erneut bindet leer es in der Regel bedeutet die Auswahl fehlgeschlagen. Haben Sie die Select-Anweisung mit erzwungenen Eingaben getestet? d. h. es in SSMS mit den deklarierten und gesetzten Variablen ausführen? – fnostro

+0

Daran habe ich nicht gedacht. Ich habe normalerweise keine Berechtigung, auf die Tabellen und Ansichten zuzugreifen. Ich benutze nur, was mir gegeben wurde. Ich kann es versuchen. –

Antwort

0

ich die Lösung gefunden!

Die ganze Zeit habe ich versucht, einen alphabetischen Wert als Zahlenwert zu speichern.

So durch

Wechsel
"WHERE ([email protected] or @name = '') " + 

Um

" WHERE ([email protected] or @name = '') " + 

Die Gridview Filter schön. Das Gleiche gilt für die zweite Abfrage

" and ([email protected] or @Sname = '') " + 

zu

" and ([email protected] or @Sname = '') " +