powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Из FoxPro в C# - Windows Forms или WPF?
7 сообщений из 7, страница 1 из 1
Из FoxPro в C# - Windows Forms или WPF?
    #39017717
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к тем, кто уже перешел на C#
Суть такая:
Из Фокса (потихоньку) ухожу окончательно. В качестве "пробы пера" сделал рабочее приложение на C# (база на MS SQL). Приложение довольно серьезное, с непростыми хранимыми процедурами на СУБД... Заказчик (пока) доволен. Я читал, что лучше сразу начинать с WPF, но время поджимало, и я не рискнул, формы - они понятней.
Сейчас времени больше, но мне все равно нужно переводить АИС нашего предприятия с Фокса на C#. Есть ли смысл заморачиваться с WPF, или Windows Forms будет вполне достаточно. АИС довольно "тяжелая", по своей сути что-то типа расчета квартирной платы, движение жилфонда, всевозможные справки и т.д. Видео, чатов, блогов нет и не предвидится. И еще уточнение: насколько сложнее WPF нежели Windows Forms с точки зрения устоявшегося фокспрошника?
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39018127
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Pulsar_p, сегодня, 15:11 [17945494]
>... насколько сложнее WPF нежели Windows Forms с точки зрения устоявшегося фокспрошника?

Пошел аналогичным путем - первое приложение сделал в среде Windows Forms. Но у меня был задел - модальные UserControl панели. Создал модальные панели в среде WPF и переписал приложение для работы в среде WPF. Они на первый взгляд очень похожи. Но в WPF работаем не с записью (строкой), а классом. И не с DataSet, а с ObservableCollection. Работаю с хранимыми процедурами MS SQL, преобразование (mapping) строки выборки в объект класса делаю ручками (пока так удобнее).

Приведу пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
  //-- Класс, что ассоциируется с записью таблицы базы данных
  public class row_Группа {
    public row_Группа (bool _chb_Группа, Guid _pk_Группа, string _str_Группа, byte[] _ts_Группа) {
      this.chb_Группа = _chb_Группа;
      this.pk_Группа = _pk_Группа;
      this.str_Группа = _str_Группа;
      this.ts_Группа = _ts_Группа;
    }
    public row_Группа() { }

    public bool   chb_Группа { get; set; }
    public Guid   pk_Группа { get; set; }
    public string str_Группа { get; set; }
    public byte[] ts_Группа { get; set; }
  }
  
  public partial class uc_Группы : UserControl, I_ПередачаДелегатаПодстановки {
    Guid pk_Guid;
    ObservableCollection<row_Группа> oc_Группы=new ObservableCollection<row_Группа>();  //-- Показываем в DataGrid 
    List<row_Группа> lst_Группы; //-- Временное хранение выборки
    row_Группа xrow;

 . . .
   //-- Строку таблицы базы данных отражаем на объект класса 
    private bool DbToRow(int i) {
      try {
        xrow = new row_Группа();
        xrow.chb_Группа = false;
        xrow.pk_Группа = (reader.IsDBNull(i)) ? гп.gd_0 : (Guid)reader.GetSqlGuid(i);
        i++;
        xrow.str_Группа = (reader.IsDBNull(i)) ? "" : ((string)reader.GetSqlString(i)).Trim();
        i++;
        xrow.ts_Группа = (byte[])reader.GetSqlBytes(i).ToSqlBinary();
        i++;
        return true;
      }
      catch {
        xrow = null;
        return false;
      }
    }

    //-- SELECT из таблицы tbl_Группы
    //====================================================================================
    private void dow_Группы_Sel() {
      nRow = 0;  //-- Число строк в выборке
      reader=null;

      try {
        бом.xbb = ош.btError[(int)err.Группы_Connection_Sel];         //-- dow_Группы_Sel() - ошибка формирования connection
        using (SqlConnection connection = new SqlConnection(гп.str_Соединение)) {

          бом.xbb = ош.btError[(int)err.Группы_СonnectionOpen_Sel];   //-- dow_Группы_Sel() - ошибка подключения к базе данных
          connection.Open();

          бом.xbb = ош.btError[(int)err.Группы_SqlCommand_Sel];       //-- dow_Группы_Sel() - ошибка построения SqlCommand
          SqlCommand command = new SqlCommand(str_SelSQL, connection);
          command.Parameters.Clear();
          command.Parameters.AddWithValue("@str_Группа", _str_Группа);
          command.CommandText = "au_Группы_Sel";
          command.CommandType = CommandType.StoredProcedure;

          бом.xbb = ош.btError[(int)err.Группы_SqlDataReader_Sel];    //-- dow_Группы_Sel() - ошибка построения SqlDataReader
          reader = command.ExecuteReader();

          //-- Формируем коллекцию из выборки
          lst_Группы = new List<row_Группа>();
          бом.xbb = ош.btError[(int)err.Группы_WhileReaderRead_Sel];  //-- dow_Группы_Sel() - ошибка обработки выборки
          while (reader.Read()) {
            nRow++;
            if (nRow == гп.max_Выборка) break;  //-- Это максимум что можем отобразить, надо уточнять запрос
            DbToRow(0);
            lst_Группы.Add(xrow);
          }
          бом.xbb = null;  //-- Штатная ситуация
        }
      }
      catch { lst_Группы = null; }
      finally { if(reader != null) reader.Close(); }
    }
    private async void ЗапросДанных() {
      if (!bl_Разрешение) return;
      bl_Разрешение = false;
      //-- Готовим параметр запроса
      _str_Группа = tbx_Запрос.Text.Trim();
      if (_str_Группа != "") _str_Группа += "%";

      при.uc_Start();
      await Task.Run(new Action(dow_Группы_Sel));
      при.uc_Stop();

      //-- Ошибка запроса данных. Готовим сообщение
      if (бом.xbb != null) {
        ВыводОшибки();
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      //-- Покажем выборку
      //dgv_Группы.AutoGenerateColumns = false;
      dgv_Группы.ItemsSource = null;
      if (lst_Группы != null) {
        oc_Группы = new ObservableCollection<row_Группа>(lst_Группы);
        lst_Группы = null;
        dgv_Группы.ItemsSource = oc_Группы;
        //-- Флаг размера выборки
        lbl_ФРВ.Visibility = (nRow == гп.max_Выборка) ? Visibility.Visible : Visibility.Hidden;
        if (oc_Группы.Count != 0) dgv_Группы.SelectedIndex = 0;
      }
      bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
    }
. . .  

Деталей хватает и первое, класс на самом деле выглядит так
//-- Класс, что ассоциируется с записью таблицы базы данных
public class row_ВизитД : INotifyPropertyChanged {

и пр. и пр.

С уважением,
Владимир.
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39018129
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pulsar_p ... Я читал, что лучше сразу начинать с WPF, но время поджимало, и я не рискнул, формы - они понятней.

- это сложный вопрос. Изначально WPF создавался как ответ Adobe на Flash (то есть создание multimedia applications). WPF довольно медлен в работе, приложения на нём писать дольше, но MS его развивает и он "в моде" так как пока ещё ничего нового не создали.

Pulsar_pЕсть ли смысл заморачиваться с WPF, или Windows Forms будет вполне достаточно.

- на мой взгляд я бы всё сделал на WinForms. Только бы добавил везде где этого требуется параллельную обработку данных и responsive UI.

Pulsar_p И еще уточнение: насколько сложнее WPF нежели Windows Forms с точки зрения устоявшегося фокспрошника?

- я много времени отдал созданию web application. WPF как раз из этой области. На Вашем месте я бы изучил и попробовал бы WPF на досуге - в жизни всё пригодится.

А по большому счёту WinForms, WPF, WebForm, MVC, MVVC - это всего лишь UI с разными подходами. На чём бы Вы не писали, 90% это С# и обычная работа с данными

Good luck!
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39018134
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Sergey Ch, сегодня, 23:03 [17947608]
>... WPF довольно медлен в работе ...

Мой опыт показывает, что WPF быстрее отображает данные выборки, нежели Windows Forms.

С уважением,
Владимир.
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39018307
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, спасибо за советы. Подумаю. Но пока склоняюсь к формам.
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39019848
Pulsar_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pulsar_pРебята, спасибо за советы. Подумаю. Но пока склоняюсь к формам.
Просто абстрагируйся от языков и баз и подумай головой - Для чего они все созданы?
Ответ прост - для решения поставленной задачи.
---------------------------------
Задача решается на фоксе? - Да. Зачем тогда геморрой с другим языком?
Базы данных нужна небольшая как в фоксе? - Да. Работай в фоксе.
Нужна огромная база? - Бери другую базу, подключай её к фоксу через драйвер и работай с ней тем же фоксом.
Нужен постоянный контроль базы данных? - Да. Зачем тогда геморрой? Работай в фоксе.
Нужен проект в кратчайшие сроки? - Бери фокс и делай на фоксе. Быстрее чем на фоксе ты не сделаешь ни на одном из современных языков.
Нужен безошибочный результат, постоянное сопровождение и доработки? - Да. Тогда работай в фоксе и не е6и мозх ни себе ни людям.
---------------------------------
Как видишь по многим пунктам фокс делает всё и всех.
...
Рейтинг: 0 / 0
Из FoxPro в C# - Windows Forms или WPF?
    #39019885
Pulsar_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pulsar_pРебята, спасибо за советы. Подумаю. Но пока склоняюсь к формам.
В заключении лишь добавлю, что жизнь программ и программных проектов (как больших так и маленьких) порой очень и очень коротка! Многие проекты умирают не успев родиться. Даже если за них тебе заплатят деньги, но твой проект тут же умрёт, то всё равно осадочек в душе останется.
Поэтому надо делать по возможности всё ОЧЕНЬ быстро и быстро внедрять и оживлять проект. Я работал на разных языках. Быстрее чем на фоксе ты не внедришь проект ни на одном из современных языков. Это факт, это даже не обсуждается!
Такова суровая правда жизни.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Из FoxPro в C# - Windows Forms или WPF?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]