Filterung ein datagridview mit Daten
Ich versuche zu filtern, eine Frist Spalte in einem datagridview von 2 datetimepickers - startDate und endDate.
datagridview ist TaskTable2,
datetimepicker1 ist startSchedule,
datetimepicker2 ist endSchedule und
Frist im datagridview ist deadlineRow
Bisher habe ich folgenden code, der erfolgreich den Zeilen, unsichtbar, die nicht zwischen den gewählten start-und end-Datum.
private void scheduleButton_Click(object sender, EventArgs e)
{
DateTime startSchedule = startDate.Value.Date;
DateTime endSchedule = endDate.Value.Date;
if (startSchedule <= endSchedule)//runs foreach loop if startdate and enddate are valid
{
foreach (DataGridViewRow dr in TaskTable2.Rows)//loops through rows of datagridview
{
string deadline = dr.Cells["Deadline"].Value.ToString(); //gets deadline values
DateTime deadlineRow = Convert.ToDateTime(deadline); //converts deadline string to datetime and stores in deadlineRow variable
if (startSchedule <= deadlineRow && deadlineRow <= endSchedule) //filters deadlines that are => startDate and <= endDate
{
dr.Visible = true; //display filtered rows here.
}
else
{
dr.Visible = false; //hide rows that are not beteen start and end date.
}
}
}
else
{
MessageBox.Show("Please ensure Start Date is set before End Date."); //ensures user selects an end date after the start date.
}
}
Allerdings habe ich ein paar bestehende Probleme:
- Stürzt die Anwendung ab und ich bekomme folgende Fehlermeldung, wenn ich wählen Sie einen Datumsbereich, der angezeigt werden keine Aufgaben:
'Zeile, die mit der Währungs-manager die position, nicht unsichtbar gemacht'
- Ich habe ein drucken-button, der soll drucken Sie die gefilterten Ergebnisse.
Es ist jedoch druckt alle gespeicherten Daten in der datagridview, wenn auch einige Zeilen visible=false durch drücken der Schaltfläche Zeitplan, so dass ich vermute, ich muss eine andere Herangehensweise um die Zeilen zu entfernen, anstatt Sie zu verstecken.
Das datagridview gebunden ist, um eine XML-Datei, damit die Daten entfernt werden können, aus dem datagridview zum filtern und drucken aslong, wie Sie bleiben in der XML-Datei.
Jede Hilfe wäre sehr geschätzt werden!
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde das
Filter
Eigenschaft auf diebindingsource
für diedatagridview
. DieFilter
- Eigenschaft ermöglicht Ihnen das anzeigen einer Teilmenge der DataSource.Beispiel aus MSDN:
Ich diese Art von
Filter
zeigen die Daten basierend auf Konto. Für ein Konto, ich habe ein Textfeld, wenn der Benutzer die Kontonummer und ich nutze dieTextChanged
Ereignis, um den filter anzuwenden. Dann habe ich eine Schaltfläche, die verwendet wird, um den Filter zu entfernen, die aus der Bindung Quelle.Wenn Sie nach Datum filtern wollen, können Sie folgende Anweisungen in dieser Frage ALSO:
BindingSource-Filter nach Datum
Mithilfe der filter auf ein Datum, das nicht vorhanden ist, sollten Sie nicht zum Absturz der app, es wird einfach nichts angezeigt.
Eine Lösung gefunden, um die Ausnahme hier:
http://discuss.itacumens.com/index.php?topic=16375.0
Fügte ich diese zu meinem code direkt, bevor ich Versuch, die Zeile nicht sichtbar.
row
ist meinForEach
loop variable. Ich überprüfen, um zu sehen, ob Ihr ausgewählt, und wenn es ist, versuchen, deaktivieren Sie die Zeile und Zelle-Auswahl vor der Einstellung dervisible
Eigenschaft.Scheint es das Problem mit der aktuellen Zeile oder die Zelle nicht sichtbar ist.
Stand ich genau das gleiche problem mit exception 'Zeile, die mit der Währungs-manager die position, nicht unsichtbar gemacht'.
Nur die Einstellung der CurrentCell auf null fixiert es für mich. Ich habe nicht überprüft, es weiter, wenn es etwas kaputt macht.