17.06.2020, 10:41. Показов 18159. Ответов 200
учу mvvm
появилось много вопросов
я создал модель
Кликните здесь для просмотра всего текста
| C# |
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
| public class GlavTables:INotifyPropertyChanged
{
public int id { get; set; }
private DateTime _dateCreating;
private string _dateTara;
private string _dateBrutto;
private string _dateRegistration;
private double _tara;
private double _brutto;
private double _netto;
private string _typeScales;
private string _transportNumber;
private string _driver;
private string _trailer;
private string _post;
private string _product;
private string _sender;
private string _payer;
private string _consignee;
private string _user;
private bool _chakRegistration;
private bool _chakBlok;
public DateTime dateCreating
{
get { return _dateCreating; }
set
{
if (_dateCreating == value)
return;
_dateCreating = value;
OnPropertyChanget("dateCreating");
}
}
public string dateTara
{
get {return _dateTara; }
set
{
if (_dateTara == value)
return;
_dateTara = value;
OnPropertyChanget("dateTara");
}
}
public string dateBrutto
{
get { return _dateBrutto; }
set
{
if (_dateBrutto == value)
return;
_dateBrutto = value;
OnPropertyChanget("dateBrutto");
}
}
public string dateRegistration
{
get { return _dateRegistration; }
set
{
if (_dateRegistration == value)
return;
_dateRegistration = value;
OnPropertyChanget("dateRegistration");
}
}
public double tara
{
get { return _tara; }
set
{
if (_tara == value)
return;
_tara = value;
OnPropertyChanget("tara");
}
}
public double brutto
{
get { return _brutto; }
set
{
if (_brutto == value)
return;
_brutto = value;
OnPropertyChanget("brutto");
}
}
public double netto
{
get { return _netto; }
set
{
if (_netto == value)
return;
_netto = value;
OnPropertyChanget("netto");
}
}
public string typeScales
{
get { return _typeScales; }
set
{
if (_typeScales == value)
return;
_typeScales = value;
OnPropertyChanget("typeScales");
}
}
public string transportNumber
{
get { return _transportNumber; }
set
{
if (_transportNumber == value)
return;
_transportNumber = value;
OnPropertyChanget("transportNumber");
}
}
public string driver
{
get { return _driver; }
set
{
if (_driver == value)
return;
_driver = value;
OnPropertyChanget("driver");
}
}
public string trailer
{
get { return _trailer; }
set
{
if (_trailer == value)
return;
_trailer = value;
OnPropertyChanget("trailer");
}
}
public string post
{
get { return _post; }
set
{
if (_post == value)
return;
_post = value;
OnPropertyChanget("post");
}
}
public string product
{
get { return _product; }
set
{
if (_product == value)
return;
_product = value;
OnPropertyChanget("product");
}
}
public string sender
{
get { return _sender; }
set
{
if (_sender == value)
return;
_sender = value;
OnPropertyChanget("sender");
}
}
public string payer
{
get { return _payer; }
set
{
if (_payer == value)
return;
_payer = value;
OnPropertyChanget("payer");
}
}
public string consignee
{
get { return _consignee; }
set
{
if (_consignee == value)
return;
_consignee = value;
OnPropertyChanget("consignee");
}
}
public string user
{
get { return _user; }
set
{
if (_user == value)
return;
_user = value;
OnPropertyChanget("user");
}
}
public bool chakRegistration
{
get { return _chakRegistration; }
set
{
if (_chakRegistration == value)
return;
_chakRegistration = value;
OnPropertyChanget("chakRegistration");
}
}
public bool chakBlok
{
get { return _chakBlok; }
set
{
if (_chakBlok == value)
return;
_chakBlok = value;
OnPropertyChanget("chakBlok");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanget(string propertyName="")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
} |
|
создал сервис , который должен заполнять данными я это сделал так
Кликните здесь для просмотра всего текста
| C# |
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
| public BindingList<GlavTables> LoadData()
{
try
{
string conn = "Server=192.168.1.111;Port=5432;User Id=postgres;Password=123;Database=postgres111";
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string sql = " SELECT * FROM \"glav\" ";
NpgsqlConnection ConnLocal = new NpgsqlConnection(conn);
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, ConnLocal);
da.Fill(ds);
BindingList<GlavTables> glavTavles = new BindingList<GlavTables>();
for (int i=0; ds.Tables[0].Rows.Count > i;i++)
{
glavTavles.Add(new GlavTables
{
id = Convert.ToInt32(ds.Tables[0].Rows[i][0].ToString()),
dateCreating = Convert.ToDateTime(ds.Tables[0].Rows[i][2].ToString()),
dateTara = ds.Tables[0].Rows[i][3].ToString(),
dateBrutto = ds.Tables[0].Rows[i][4].ToString(),
dateRegistration = ds.Tables[0].Rows[i][5].ToString(),
tara = nullNo(ds.Tables[0].Rows[i][6].ToString()),
brutto = nullNo(ds.Tables[0].Rows[i][7].ToString()),
netto = nullNo(ds.Tables[0].Rows[i][8].ToString()),
typeScales = ds.Tables[0].Rows[i][11].ToString(),
transportNumber = ds.Tables[0].Rows[i][12].ToString(),
driver = ds.Tables[0].Rows[i][13].ToString(),
trailer = ds.Tables[0].Rows[i][14].ToString(),
post = "Пост1",
product = ds.Tables[0].Rows[i][16].ToString(),
sender = ds.Tables[0].Rows[i][17].ToString(),
payer = ds.Tables[0].Rows[i][18].ToString(),
consignee = ds.Tables[0].Rows[i][19].ToString(),
user = ds.Tables[0].Rows[i][20].ToString(),
chakRegistration = true,
chakBlok = false
});
}
return glavTavles;
}
catch
{ return null; }
} |
|
после чего в основном классе
Кликните здесь для просмотра всего текста
| C# |
1
2
3
| GlavTablesIOServices glavTablesIOServices = new GlavTablesIOServices();
_glavTables = glavTablesIOServices.LoadData();
dg_glavGrid.ItemsSource = _glavTables; |
|
и тут первый вопрос. можно это сделать без циклов ? например сразу конвертировать в BindingList и как вообще правильно заполнять данными из бд?
дальше я показываю таблицу в view
Кликните здесь для просмотра всего текста
| XML |
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
| <DataGrid
x:Name="dg_glavGrid" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=id}" IsReadOnly="True" Header="№"/>
<DataGridTextColumn Binding="{Binding Path=dateCreating}" IsReadOnly="True" Header="Дата создания"/>
<DataGridTextColumn Binding="{Binding Path=dateTara}" IsReadOnly="True" Header="Дата тара"/>
<DataGridTextColumn Binding="{Binding Path=dateBrutto}" IsReadOnly="True" Header="Дата брутто"/>
<DataGridTextColumn Binding="{Binding Path=dateRegistration}" IsReadOnly="True" Header="Дата оформления"/>
<DataGridTextColumn Binding="{Binding Path=tara}" IsReadOnly="True" Header="Тара"/>
<DataGridTextColumn Binding="{Binding Path=brutto}" IsReadOnly="True" Header="Брутто"/>
<DataGridTextColumn Binding="{Binding Path=netto}" IsReadOnly="True" Header="Нетто"/>
<DataGridTextColumn Binding="{Binding Path=typeScales}" IsReadOnly="True" Header="Тип весов"/>
<DataGridTextColumn Binding="{Binding Path=transportNumber}" IsReadOnly="True" Header="Т/С"/>
<DataGridTextColumn Binding="{Binding Path=driver}" IsReadOnly="True" Header="Водитель"/>
<DataGridTextColumn Binding="{Binding Path=trailer}" IsReadOnly="True" Header="Прицеп"/>
<DataGridTextColumn Binding="{Binding Path=post}" IsReadOnly="True" Header="Имя поста"/>
<DataGridTextColumn Binding="{Binding Path=product}" IsReadOnly="True" Header="Товар"/>
<DataGridTextColumn Binding="{Binding Path=sender}" IsReadOnly="True" Header="Отправитель"/>
<DataGridTextColumn Binding="{Binding Path=payer}" IsReadOnly="True" Header="Плательщик"/>
<DataGridTextColumn Binding="{Binding Path=consignee}" IsReadOnly="True" Header="Получатель"/>
<DataGridTextColumn Binding="{Binding Path=user}" IsReadOnly="True" Header="Пользователь"/>
<DataGridCheckBoxColumn Binding="{Binding Path=chakRegistration, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" Header="Оформление"/>
<DataGridCheckBoxColumn Binding="{Binding Path=chakBlok, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" Header="Доступность"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid> |
|
и снова вопрос. мне нужно добавлять данные в BindingList и при событии добавления/удаления/изменения делать изменения в бд? Или просто делать запросы в бд update/insert и после этого заново заполнять данными? второе звучит проще и логичней для меня.