Announcement

Collapse
No announcement yet.

Binding Source - SupportsSearching

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binding Source - SupportsSearching

    Hallo allerseits,

    ich habe ein Problem mit der Eigenschaft SupportsSeaching der BindingSource.

    [highlight=c#]
    using (Tracking.DataLayer.TrackingDataContext ctx = new Tracking.DataLayer.TrackingDataContext())
    {
    // Linq-Abfrage (Linq to SQL)
    // gibt ein Objekt vom Typ IQueryable zurück
    var query = from t in ctx.vw_TaskListes
    select new { t.TaskID, t.BeschrKurz, t.Verantwortlicher };

    this.bindingSource1 = new BindingSource();
    this.bindingSource1.DataSource = query;
    dgvTaskListe.DataSource = this.bindingSource1;
    }
    [/highlight]

    Nun möchte ich in der Liste auf einem ganz bestimmten Record positionieren, z.B. dem Record mit der ID = 3:

    [highlight=c#]
    if (this.bindingSource1.SupportsSearching != true)
    MessageBox.Show("Cannot search the list.");
    else // und auf dem neuen Datensatz positionieren
    this.bindingSource1.Position = this.bindingSource1.Find("ID", 3);
    [/highlight]

    Hier laufe ich immer in den if-Zweig rein. Anscheinend unterstützt die verwendete BindingSource das Suchen nicht.

    Die Suche in msdn hat dann folgendes ergeben:
    "Wenn die Datenquelle keine IBindingList ist, gibt SupportsSearching immer false zurück."
    Frage: wie kann ich sicherstellen, dass ich es mit einem IBindingList-Objekt und nicht nur mit einem IQueryable-Objekt zu tun habe?

  • #2
    Hallo,

    IBindingList wird durch ein DataView dargestellt. Dieses aus einer LINQ-Query zu erstellen ist aufwändiger als die LINQ-Query für die ID auszuführen, d.h. mit einer where-Klausel.

    Anmerkung:
    Code:
    if (this.bindingSource1.SupportsSearching != true)
    ist Schwachsinn da SupportsSearching nur true/false zurück gibt, also ein bool ist.
    Korrekt wäre
    Code:
    if (!this.bindingSource1.SupportsSearching)
    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      vielleicht muss ich ein bisschen weiter ausholen.

      Ich möchte in einer Windows-Forms Anwendung ein DataGridView mit Daten aus einer Linq-Query (Linq to SQL) füllen. Als Zwischenschritt verwende ich ein BindingSource-Objekt. Das klappt alles prima.
      Auch das Positionieren funktioniert (bindingSource.Position = Pos), wenn ich zum Editieren des Datensatzes ein Form mit Detaildaten aufgerufe, und nach dem Editieren wieder in die Form mit dem DataGridView zurückkehre.
      Wenn ich aber einen Datensatz neu erstellt habe, ist die Anforderung, dass genau auf diesem neu erstellten Datensatz positioniert wird. Nun habe ich mir gedacht, ich könnte mittels Find-Methode der BindingSource die neue Position ermitteln und dann der BindingSource zuweisen.

      Es soll auch keine Mischung von Technologien verwendet werden. Gibt es eventuell eine Lösung mit Hilfe von Extension Methods? Oder gibt es eventuell eine ganz andere Lösung?

      Vielen Dank
      Bernhard

      Comment

      Working...
      X