Announcement

Collapse
No announcement yet.

Automatischer Refresh von DataGrid

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

  • Automatischer Refresh von DataGrid

    Hallo,

    ich beschäftige mich momentan mit dem Compact Framework und habe es bis jetzt nicht geschafft mein DateGrid, dass ich mit einer Liste mit eigenen Objekten List<Asset> als DataSource fülle, automatisch zu refreshen,
    wenn ich aus einem anderen Form heraus dieses List<Asset> Objekt verändere.


    Code-Snipped:

    Code:
    List<Asset> assets = new List<Asset>();
    
    //...
    
    DataGridTableStyle dataGridTableStyle = new DataGridTableStyle();
    
    dataGridTableStyle.MappingName = "List`1";
    
    DataGridColumnStyle idColumnStyle = new DataGridTextBoxColumn();
    idColumnStyle.MappingName = "Id";
    idColumnStyle.Width = 0;
    
    
    DataGridColumnStyle codeColumnStyle = new DataGridTextBoxColumn();
    codeColumnStyle.HeaderText = "Barcode";
    codeColumnStyle.MappingName = "Barcode";
     codeColumnStyle.Width = 80;
    
    //... 
    
    
    dataGridTableStyle.GridColumnStyles.Add(idColumnStyle);
    dataGridTableStyle.GridColumnStyles.Add(codeColumnStyle);
    
    
    dataGridScannedAssets.TableStyles.Add(dataGridTableStyle);
    
    // ...
    
    dataGridScannedAssets.DataSource = assets;

    Wenn ich jetzt beispielweise ein weiteres WinForm öffne:

    Code:
    AssetChangeForm assetChangeForm = new AssetChangeForm(asset, _inventoryProcess);
    
    dassetChangeForm.Show();
    dataGridScannedAssets.Refresh();
    wird das dataGridScannedAsset.Refresh(); natürlich direkt nach dem Show() aufgerufen
    und nicht erst nach beenden des "assetChangedForm" (in dem ich meine List<Asset> verändere).

    Wie kann ich erreichen das mein Grid automatisch bzw. nach meinem Szenario aktualisiert wird?

    Ich habe es einmal "ins Blaue hinein" mit einem Binding versucht:

    Code:
    dataGridScannedAssets.DataSource = _inventoryProcess.ScannedAssets;
    dataGridScannedAssets.DataBindings.Add(new Binding("Id", dataGridScannedAssets.DataSource, "List`1"));
    Aber das war natürlich ein Fehlschlag ;-)


    Also,
    wer weiß Rat?


    Bye,
    Martin

  • #2
    Noch ein Nachtrag..


    Ich könnte natürlich einfach das WinForm-Objekt mit meinem DataGrid dem "ChildForm", in dem ich meine List<Asset> ändere als Parameter im Konstruktor übergeben und dann von dort aus das DataGrid refreshen,
    aber ich denke es müsste auch eleganter gehen, oder?

    Comment


    • #3
      Anstatt List<> solltest du Bindinglist<> verwenden dann bekommst du die ganze Refresh Magie geliefert wenn sich diese Liste ändert.

      Comment


      • #4
        normalerweise benützt man dafür die Bindingsource Komponente allerdings weiß ich jetzt nicht ob diese im CompactFramework vorhanden ist.
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Anstatt List<> solltest du Bindinglist<> verwenden dann bekommst du die ganze Refresh Magie geliefert wenn sich diese Liste ändert.
          Vielen Dank, klappt prima!
          Hat die BindingList eigentlich irgendwelche Nachteile wie deutlich höherer Speicherverbrauch oder Ähnliches?
          Zuletzt editiert von macap; 17.02.2009, 13:05.

          Comment


          • #6
            Für das automatische Refreshen werden Events verdrahtet die natürlich Zeit verbrauchen also wird eine BindingList gegenüber einer einfachen List Performance kosten. Ich glaube aber kaum das das eine messbare Größe ist.
            Eine eigene Refreshimplementation im Zusammenspiel mit List anstatt Bindinglist würde genau den selben (oder schlechter je nach Qualität der Implementierung) Einfluss haben.

            Da BindingList von Collection<T> ableitet und Collection intern List<T> zur Datenhaltung verwendet denke ich das der Speicherverbrauch gleich sein sollte habe das aber nie explizit untersucht.

            Comment

            Working...
            X