Esempio n. 1
0
        private void UpdateMeters()
        {
            logger.Info("Получаем счетчики места...");
            try
            {
                string sql = "SELECT meters.id, meters.name, meter_types.name as type, meters.disabled FROM meters " +
                    "LEFT JOIN meter_types ON meter_types.id = meters.meter_type_id " +
                    "WHERE place_type_id = @place_type AND place_no = @place_no " +
                    "ORDER BY disabled";
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

                cmd.Parameters.AddWithValue("@place_type", ComboWorks.GetActiveId (comboPType));
                cmd.Parameters.AddWithValue("@place_no", entryNumber.Text);

                List<object[]> DBRead = new List<object[]>();
                using(MySqlDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        object[] values = new object[rdr.FieldCount];
                        rdr.GetValues (values);
                        DBRead.Add (values);
                    }
                }
                if(DBRead.Count == 0)
                    return;
                if(Meters == null)
                {
                    int i = 0;
                    Meters = new MeterTable[DBRead.Count];
                    foreach(object[] row in DBRead)
                    {
                        Meters[i] = AddMeterPage(Convert.ToInt32 (row[0]), (string)row[2], (bool)row[3]);
                        if(i == 0) // Удаляем вкладку по умочанию, только после добавления новой, иначе проблемы с отображением.
                        {
                            notebookMeters.RemovePage (0); //FIXME Подумать о обработки ситуации когда все счетчики удалены.
                            buttonEditMeter.Sensitive = true;
                            buttonDeleteMeter.Sensitive = true;
                            buttonAddReading.Sensitive = true;
                        }
                        i++;
                    }
                }
                else
                {
                    int offset = 0, i = 0;
                    MeterTable[] NewMeters = new MeterTable[DBRead.Count];
                    foreach(MeterTable meter in Meters)
                    {
                        bool Found = false;
                        foreach(object[] row in DBRead)
                        {
                            if(Convert.ToInt32 (row[0]) == meter.ID && row[2].ToString () == meter.Name && (bool)row[3] == meter.Disabled)
                                Found = true;
                        }
                        if(!Found)
                        {
                            notebookMeters.RemovePage (i);
                            offset++;
                        }
                        else
                        {
                            NewMeters[i] = meter;
                            i++;
                        }
                    }

                    foreach(object[] row in DBRead)
                    {
                        bool Found = false;
                        foreach(MeterTable meter in NewMeters)
                        {
                            if(meter != null && meter.ID == Convert.ToInt32 (row[0]))
                            {
                                Found = true;
                                break;
                            }
                        }
                        if(Found)
                            continue;
                        NewMeters[i] = AddMeterPage(Convert.ToInt32 (row[0]), (string)row[2], (bool)row[3] );
                        i++;
                    }
                    Meters = NewMeters;
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                QSMain.ErrorMessageWithLog(this, "Ошибка получения информации о счётчиках!", logger, ex);
            }
        }
Esempio n. 2
0
        private MeterTable AddMeterPage(int id, string name, bool disable)
        {
            MeterTable meter = new MeterTable ();
            meter.ID = id;
            meter.Name = name;
            meter.Filled = false;
            meter.Disabled = disable;
            meter.liststore = new ListStore (typeof(int), // 0 - ID
                                         typeof(string), //1 - date
                                         typeof(string), //2 - tariff
                                         typeof(string), //3 - value
                                         typeof(string),  //4 - delta
                                         typeof(int)		//5 - digital value
                                             );
            meter.treeview = new TreeView (meter.liststore);

            meter.treeview.AppendColumn ("Дата", new CellRendererText (), "text", 1);
            meter.treeview.AppendColumn ("Тариф", new CellRendererText (), "text", 2);
            meter.treeview.AppendColumn ("Показания", new CellRendererText (), "text", 3);
            meter.treeview.AppendColumn ("Расход", new CellRendererText (), "text", 4);

            ScrolledWindow Scroll = new ScrolledWindow ();
            if (disable)
                name += "(отк.)";
            notebookMeters.AppendPage (Scroll, new Label (name));

            Scroll.Add (meter.treeview);
            meter.treeview.CursorChanged += OnTreeviewReadingCursorChanged;
            meter.treeview.Show ();
            notebookMeters.ShowAll ();

            return meter;
        }