Witam

Na wstępie informuje że jestem nowicjuszem.

W projekcie posiadam obiekt DataSet.dataTable który jest zbindowany via DataSource do DataGridView. Program mój pobiera na żywo dane z API pewnego programu updatując tabele w dataSetcie używając metody LoadDataRow().

Tabela w dataSetcie ma wymiary 300 wierszy x 10 kolumn co daje 3000 komórek. Pierwsza kolumna jest indeksem typu string. Reszta kolumn to różne typy(int, decimal, datetime...).

Update wygląda mniej więcej tak:

  // event:
  void record_OnRecordUpdate(ref string record)
        {
            structRecordUpdate r = (structRecordUpdate)xs.Deserialize(new MemoryStream(encoding.GetBytes(record)));
            recordupdate(ref r);

        }
        void recordupdate(ref structRecordUpdate r)
        {
           try
            {
                if (this.InvokeRequired)
                {
                  
                        string sym = r.sym;
                        decimal last = (decimal)r.last;
                        int code = r.code;
                        int max_d = r.max;
                        int min_d = r.min;
                        

                        this.Invoke((MethodInvoker)delegate() { dataSet.Tables["Records"].LoadDataRow(new object[] { sym, last, code, max_d, min_d}, LoadOption.Upsert); });
                    }
                }
              

            }
            catch 
           {
              
            }
        }
 

Wszystko pięknie śmiga tylko gdyby nie to że API wysyła wartość 0(int) jeśli nie nastąpiła zmiana wartości względem ostatniej wartości. Tyczy się to wszystkich pól w strukturze structRecordUpdate za wyjątkiem sym(który jest indeksem).

Pytanie brzmi jak "zmusić" dataTable/DataGridView żeby nie zmieniał zawartości komórki jak dostaje 0 ? Jak obejść ten problem ? Ważna informacja to taka że ilość wywołań metody recordupdate() wynosi średnio 300/sekundę a w ekstremum 3000/sekundę. Ekstremum trwa około 5-10min.

dzięki
Dawid