2017-04-22 1 views
0

Ich muss ein Dropdown-Menü erstellen, das dem Benutzer die Auswahl eines Datumsbereichs und die Auswahl aller Datensätze mit Datumsangaben zwischen dem Bereich ermöglicht.C# - Dropdown-Liste der Datumsbereiche, um die relevanten Daten zu filtern

Ich weiß, wie man einen Bereich abfragt (Codeausschnitt unten), aber wie frage ich ab, dass das Dropdown nur mit den Optionen "Letzte 7 Tage", "Letzte 15 Tage", "Letzte 30 Tage" gefüllt ist , "Letzte 60 Tage" und "Alle Transaktionen" (und zeigt dann die entsprechenden Transaktionen basierend auf der Auswahl an)?

Außerdem wäre es schön zu wissen, wie man eine Option namens "Benutzerdefiniert" hat, mit der der Benutzer seinen eigenen Datumsbereich eingeben kann, aber das hat keine Priorität.

Was ich unten habe, wird Transaktionen in den letzten sieben Tagen abfragen und anzeigen, aber das erreicht offensichtlich nicht, was ich suche.

public SelectList GetDateRanges() 
    { 
     DateTime today = DateTime.Today; 
     DateTime minusSeven = today.AddDays(-7); 
     DateTime minusFifteen = today.AddDays(-15); 
     DateTime minusThirty = today.AddDays(-30); 
     DateTime minusSixty = today.AddDays(-60); 

     var query = from t in db.Transactions 
        where t.TransactionDate >= minusSeven 
        select t; 

Mein Gedanke ist, dass ich möglicherweise eine statische Liste erstellen können, aber dann weiß ich nicht, wie ich in dieser Liste basiert auf einer Auswahl des Benutzers abfragen würde.

+0

Übergeben Sie den Punkt in Ihre Funktion, dann können Sie jeden Bereich abfragen. – Jasen

+0

Werfen Sie einen Blick auf vordefinierte Bereiche. [Link] (http://www.deraterangepicker.com/#ex4) –

+0

Ich habe diesen Link zuvor angeschaut, aber ich benutze dieses Dropdown für die Suchfunktion, und das muss in meinem Controller sein. Oder werden die vordefinierten Bereiche die Abfragen irgendwie ansprechen? – CodeFrog

Antwort

0

Übergeben Sie die Zeit zurück zu Ihrer Funktion

public SelectList GetDateRanges(int daysBack) 
{ 
    var oldestDate = (DateTime.Today).AddDays(daysBack * -1); 

    var query = from t in db.Transactions 
       where t.TransactionDate >= oldestDate 
       select t; 
    ... 
} 

und die daysBack Werte in der Auswahlsteuerung voreingestellt.

<select name="daysBack"> 
    <option value="7">Last 7 days</option> 
    <option value="15">Last 15 days</option> 
</select> 

Wenn Sie dem Benutzer letztendlich volle Kontrolle geben wollen, dann übergeben Sie die beiden Datumsgrenzen. Jede andere Option ist nur eine Teilmenge dieser Abfrage.

public SelectList GetDateRanges(DateTime startDate, DateTime endDate) 
{ 
    var query = from t in db.Transactions 
       where t.TransactionDate >= startDate && 
         t.TransactionDate <= endDate 
       select t; 
    ... 
} 

Dann können Sie ein Client-Side-Plug-in verwenden, um die Arbeit der Bereitstellung der beiden Daten zu erledigen.

+0

Vielen Dank - das ist definitiv ein guter Teil von dem, was ich gesucht habe. Können Sie erklären, was Sie mit "Select Control" und damit verbundenem Code meinen? Ist das mit Ansichten verbunden? – CodeFrog

+0

Das '