deemo.txt 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. Первоначальный алгоритм. Создали класс бд, создали класс frame. В MainWindow инициализировали бд и фрейм, сделали переход на следующее окно(авторизация)
  2. class db:
  3. class db
  4. {
  5. public static Entities tbe;
  6. }
  7. -----------------
  8. class Frame
  9. class MainFrame
  10. {
  11. public static Frame frame;
  12. }
  13. -----------------
  14. class User - объединить в одну строку
  15. public string FullName
  16. {
  17. get
  18. {
  19. return UserSurname + " " + UserName + " " + UserPatronymic;
  20. }
  21. }
  22. -----------------
  23. style App
  24. <Style x:Key="tbStyleFont" TargetType="TextBlock">
  25. <Style.Setters>
  26. <Setter Property="FontFamily" Value="Comic Sans MS"/>
  27. <Setter Property="FontSize" Value="15"/>
  28. </Style.Setters>
  29. </Style>
  30. -----------------
  31. окно MainWindow
  32. public MainWindow()
  33. {
  34. InitializeComponent();
  35. db.tbe = new Entities();
  36. MainFrame.frame = fMain;
  37. MainFrame.frame.Navigate(new AuthorizationPage());
  38. }
  39. -----------------
  40. Капча AuthPage(первое окно)
  41. private DispatcherTimer dispatcher;
  42. public static bool checkedCaptcha;
  43. private int counter = 10;
  44. public AuthorizationPage()
  45. {
  46. InitializeComponent();
  47. dispatcher = new DispatcherTimer();
  48. dispatcher.Interval = new TimeSpan(0, 0, 0, 1);
  49. dispatcher.Tick += new EventHandler(TimerEnd);
  50. }
  51. private void TimerEnd(object sender, EventArgs e)
  52. {
  53. try
  54. {
  55. if (counter != 0)
  56. {
  57. tbAuth.Text = "Новый код доступен через \n\t" + string.Format("00:00:{0}", counter) + " секунд ";
  58. }
  59. else
  60. {
  61. btnAuth.IsEnabled = true;
  62. gpPassword.IsEnabled = true;
  63. gpLogin.IsEnabled = true;
  64. tbAuth.Visibility = Visibility.Collapsed;
  65. dispatcher.Stop();
  66. }
  67. counter--;
  68. }
  69. catch
  70. {
  71. MessageBox.Show("Дваайте еще раз попробуем");
  72. }
  73. }
  74. private void btnAuth_Click(object sender, RoutedEventArgs e)
  75. {
  76. User user = db.tbe.User.FirstOrDefault(x => x.UserPassword == tbPassword.Text && x.UserLogin == tbLogin.Text);
  77. try
  78. {
  79. if (user == null)
  80. {
  81. //tbLogin.Text != user.UserLogin && tbPassword.Text != user.UserPassword
  82. MessageBox.Show("Введенный логин и/или пароль неверен");
  83. Captcha captcha = new Captcha();
  84. captcha.Show();
  85. captcha.Closing += (obj, args) =>
  86. {
  87. if (!checkedCaptcha)
  88. {
  89. btnAuth.IsEnabled = false;
  90. gpPassword.IsEnabled = false;
  91. gpLogin.IsEnabled = false;
  92. counter = 10;
  93. dispatcher.Start();
  94. }
  95. };
  96. }
  97. else
  98. {
  99. if (!string.IsNullOrEmpty(tbLogin.Text) && !string.IsNullOrEmpty(tbPassword.Text))
  100. {
  101. if (tbLogin.Text != null && tbPassword.Text != null)
  102. {
  103. if (user.UserLogin == tbLogin.Text)
  104. {
  105. if (user.UserPassword == tbPassword.Text)
  106. {
  107. NavigationService.Navigate(new PageProducts(user));
  108. }
  109. else
  110. {
  111. MessageBox.Show("Пароль в системе отсутствует");
  112. }
  113. }
  114. else
  115. {
  116. MessageBox.Show("Логин в системе отсутствует");
  117. }
  118. }
  119. }
  120. else
  121. {
  122. MessageBox.Show("Неверный логин и/или пароль!");
  123. }
  124. }
  125. }
  126. catch (Exception ex)
  127. {
  128. MessageBox.Show(ex.Message);
  129. }
  130. }
  131. -----------------
  132. Страница с выводом:
  133. В инициализации:
  134. db.tbe = new Entities();
  135. lvProduct.ItemsSource = db.tbe.Product.ToList();
  136. lvProduct.SelectedValuePath = "ProductArticleNumber";
  137. tblast.Text = db.tbe.Product.Count().ToString(); // вывод 15
  138. tbFirst.Text = lvProduct.Items.Count.ToString(); // вывод 47
  139. -----------------
  140. <Page.Resources>
  141. <BitmapImage x:Key="noPhoto" UriSource="\resources\picture.png"></BitmapImage>
  142. </Page.Resources>
  143. -----------------
  144. 1.ListView
  145. 2.ListView.ItemTemplate
  146. 3.DataTemplate
  147. 4.Grid
  148. В конце можно изьебнуться и вставить. При нажатии на контекстное меню добавляется товар в заказ
  149. <ListView.ContextMenu>
  150. <ContextMenu>
  151. <MenuItem Header="Добавить к заказу" Click="MenuItem_Click" Uid="{Binding ProductArticleNumber}"></MenuItem>
  152. </ContextMenu>
  153. </ListView.ContextMenu>
  154. </ListView>
  155. а в коде
  156. public static List<string> articleProducts = new List<string>();
  157. private void MenuItem_Click(object sender, RoutedEventArgs e)
  158. {
  159. btnOrder.Visibility = Visibility.Visible;
  160. articleProducts.Add(lvProduct.SelectedValue.ToString());
  161. }
  162. Создать кнопку btnorder
  163. private void btnOrder_Click(object sender, RoutedEventArgs e)
  164. {
  165. Window1 window = new Window1(user);
  166. window.Show();
  167. window.Closing += (obj, args) =>
  168. {
  169. if (articleProducts.Count == 0)
  170. {
  171. btnOrder.Visibility = Visibility.Collapsed;
  172. }
  173. else
  174. {
  175. btnOrder.Visibility = Visibility.Visible;
  176. }
  177. };
  178. }
  179. -----------------
  180. Просмотр заказа (корзина)
  181. Разметка:
  182. <Grid>
  183. <Grid>
  184. <Grid.RowDefinitions>
  185. <RowDefinition Height="*"></RowDefinition>
  186. <RowDefinition Height="5*"></RowDefinition>
  187. <RowDefinition Height="*"></RowDefinition>
  188. </Grid.RowDefinitions>
  189. <StackPanel Grid.Row="1">
  190. <ListView Name="lvOrder" ScrollViewer.VerticalScrollBarVisibility="Disabled" Height="230" Width="800" >
  191. <ListView.ItemTemplate>
  192. <DataTemplate>
  193. <Grid Background="{Binding colorBrush}" Width="770" >
  194. <Grid.ColumnDefinitions>
  195. <ColumnDefinition Width="0.5*"/>
  196. <ColumnDefinition Width="1*"/>
  197. <ColumnDefinition Width="*"/>
  198. </Grid.ColumnDefinitions>
  199. <StackPanel Grid.Column="0">
  200. <Image Height="100" Source="{Binding ProductPhoto, TargetNullValue={StaticResource noPhoto}}"></Image>
  201. </StackPanel>
  202. <StackPanel Grid.Column="1">
  203. <TextBlock Text="{Binding ProductName}"/>
  204. <TextBlock Text="{Binding ProductDescription}" TextWrapping="Wrap"/>
  205. <TextBlock Text="{Binding manufacture.manufactureName}"/>
  206. <StackPanel Orientation="Horizontal">
  207. <TextBlock Text=" "></TextBlock>
  208. <TextBlock Text="{Binding ProductCost, StringFormat={}{0:0}}" TextDecorations="Strikethrough" Uid="{Binding ProductDiscountAmount}"/>
  209. <TextBlock Text=" "></TextBlock>
  210. <TextBlock Text="{Binding ActualPrice, StringFormat={}{0:0}руб.}"/>
  211. </StackPanel>
  212. </StackPanel>
  213. <StackPanel Grid.Column="2">
  214. <Button Background="#498c51" Content="Удалить из заказа" Name="btnDelete" Click="btnDelete_Click" Uid="{Binding ProductArticleNumber}"/>
  215. <GroupBox Header="Количество товара">
  216. <TextBox Text="1" TextChanged="TextBox_TextChanged" Uid="{Binding ProductArticleNumber}">
  217. <TextBox.ToolTip>Введите количество товара</TextBox.ToolTip>
  218. </TextBox>
  219. </GroupBox>
  220. </StackPanel>
  221. </Grid>
  222. </DataTemplate>
  223. </ListView.ItemTemplate>
  224. </ListView>
  225. <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
  226. <ComboBox Name="cmbOrderPoint"></ComboBox>
  227. <Button Margin="15 0 0 0" Background="#498c51" Content="Сформировать заказ" Name="btnFormOrder" Click="btnFormOrder_Click"/>
  228. <TextBlock Name="tbSummaZakaza" FontWeight="Bold"></TextBlock>
  229. <TextBlock Name="tbSaleZakaza" Margin="15 0 0 0"></TextBlock>
  230. </StackPanel>
  231. </StackPanel>
  232. </Grid>
  233. </Grid>
  234. Код на корзину
  235. List<Product> products = new List<Product>();
  236. List<Article> articles = new List<Article>();
  237. User user;
  238. public Window1(User user)
  239. {
  240. InitializeComponent();
  241. System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
  242. this.user = user;
  243. cmbOrderPoint.ItemsSource = db.tbe.Point.ToList();
  244. cmbOrderPoint.SelectedValuePath = "idPickupPoint";
  245. cmbOrderPoint.DisplayMemberPath = "displayPoint";
  246. cmbOrderPoint.SelectedIndex = 0;
  247. foreach (Product product in db.tbe.Product.ToList())
  248. {
  249. foreach (string item in PageProducts.articleProducts)
  250. {
  251. if (product.ProductArticleNumber == item)
  252. {
  253. products.Add(product);
  254. Article article = new Article()
  255. {
  256. article = product.ProductArticleNumber,
  257. count = 1,
  258. };
  259. articles.Add(article);
  260. }
  261. }
  262. }
  263. lvOrder.ItemsSource = products;
  264. lvOrder.SelectedValuePath = "ProductArticleNumber";
  265. summOrder();
  266. }
  267. private void summOrder() // вывод суммы заказа
  268. {
  269. double sum = 0;
  270. double summWithDiscount = 0;
  271. foreach (var item in articles)
  272. {
  273. sum += Convert.ToDouble(db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == item.article).ProductCost * item.count);
  274. summWithDiscount += Convert.ToDouble(((db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == item.article).ProductCost - db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == item.article).ProductCost / 100 * db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == item.article).ProductDiscountAmount)) * item.count);
  275. }
  276. tbSaleZakaza.Text = "Общая скидка " + Convert.ToInt32((sum - summWithDiscount)).ToString() + "руб.";
  277. tbSummaZakaza.Text = "Итоговая цена " + Convert.ToInt32(Math.Round(summWithDiscount)).ToString() + "руб.";
  278. orderSummaSale = Convert.ToInt32((sum - summWithDiscount)).ToString() + "руб.";
  279. orderSumma = Convert.ToInt32(Math.Round(summWithDiscount)).ToString() + "руб.";
  280. }
  281. public static string ordedDate;
  282. public static int orderID;
  283. public static string orderSostav;
  284. public static string orderSumma;
  285. public static string orderSummaSale;
  286. public static string orderPoint;
  287. private void btnFormOrder_Click(object sender, RoutedEventArgs e)
  288. {
  289. try
  290. {
  291. Random random = new Random();
  292. int codeRND = random.Next(100, 999);
  293. Order order = new Order();
  294. order.OrderID = db.tbe.Order.Max(x => x.OrderID) + 1;
  295. order.OrderStatus = 1;
  296. order.OrderPickupPoint = (int)cmbOrderPoint.SelectedValue;
  297. if (user != null)
  298. {
  299. order.OrderClientsId = user.UserID;
  300. }
  301. else
  302. {
  303. }
  304. order.Code = codeRND;
  305. order.OrderDate = DateTime.Now;
  306. foreach (Product item in products)
  307. {
  308. if (item.ProductQuantityInStock < 3 || item.ProductQuantityInStock == 0)
  309. {
  310. order.OrderDeliveryDate = DateTime.Now.AddDays(6);
  311. }
  312. else
  313. {
  314. order.OrderDeliveryDate = DateTime.Now.AddDays(3);
  315. }
  316. }
  317. db.tbe.Order.Add(order);
  318. db.tbe.SaveChanges();
  319. string orderPoint = cmbOrderPoint.Text;
  320. int orderID = order.OrderID;
  321. // формирование для смежной таблицы
  322. foreach (var item in articles)
  323. {
  324. OrderProduct orderProduct = new OrderProduct();
  325. orderProduct.OrderID = order.OrderID;
  326. orderProduct.ProductArticleNumber = item.article;
  327. orderProduct.Count = item.count;
  328. db.tbe.OrderProduct.Add(orderProduct);
  329. }
  330. string ordedDate = order.OrderDeliveryDate.ToString();
  331. db.tbe.SaveChanges();
  332. PageProducts.articleProducts.Clear();
  333. var ok = MessageBox.Show("Ваш заказ сформирован. Вам доступен талон для получения заказа. ", "Системное сообщение", MessageBoxButton.OK, MessageBoxImage.Information);
  334. // формирование состава заказа
  335. string nameOrderProduct = "";
  336. List<OrderProduct> orderProductSostav = db.tbe.OrderProduct.Where(x => x.OrderID == order.OrderID).ToList();
  337. foreach (var item in orderProductSostav)
  338. {
  339. Product product1 = db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == item.ProductArticleNumber);
  340. nameOrderProduct += product1.ProductName + $"({item.Count} шт.) ";
  341. }
  342. }
  343. catch (Exception ex)
  344. {
  345. MessageBox.Show(ex.Message);
  346. }
  347. }
  348. private void deleteMethod(string id) // метод удаления из списка добавленных
  349. {
  350. PageProducts.articleProducts.Remove(id);
  351. if (PageProducts.articleProducts.Count == 0)
  352. {
  353. this.Close();
  354. }
  355. else
  356. {
  357. products.Clear();
  358. foreach (Product product in db.tbe.Product.ToList())
  359. {
  360. foreach (string item in PageProducts.articleProducts)
  361. {
  362. if (product.ProductArticleNumber == item)
  363. {
  364. products.Add(product);
  365. Article article = new Article()
  366. {
  367. article = product.ProductArticleNumber,
  368. count = 1,
  369. };
  370. articles.Add(article);
  371. MessageBox.Show(article.article);
  372. }
  373. }
  374. }
  375. lvOrder.Items.Refresh();
  376. lvOrder.ItemsSource = products;
  377. lvOrder.SelectedValuePath = "ProductArticleNumber";
  378. lvOrder.Items.Refresh();
  379. summOrder();
  380. }
  381. }
  382. private void btnDelete_Click(object sender, RoutedEventArgs e)
  383. {
  384. Button button = (Button)sender;
  385. string id = button.Uid;
  386. deleteMethod(id);
  387. }
  388. private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
  389. {
  390. TextBox textBox = (TextBox)sender;
  391. string id = textBox.Uid;
  392. articles.FirstOrDefault(x => x.article == id).count = Convert.ToInt32(textBox.Text);
  393. if (!string.IsNullOrEmpty(textBox.Text))
  394. {
  395. summOrder();
  396. }
  397. if (textBox.Text.Equals("0"))
  398. {
  399. deleteMethod(id);
  400. }
  401. }
  402. -----------------
  403. -----------------
  404. Отсутствие фото:
  405. -----------------
  406. В гриде биндинг, нулевая фотка:
  407. <StackPanel Grid.Column="0" >
  408. <Image Height="100" Source="{Binding ProductPhoto, TargetNullValue={StaticResource noPhoto}}"></Image>
  409. </StackPanel>
  410. Вывод в комбобокс без контента на разметке:
  411. cmbOrderPoint.ItemsSource = db.tbe.Point.ToList();
  412. cmbOrderPoint.SelectedValuePath = "idPickupPoint";
  413. cmbOrderPoint.DisplayMemberPath = "displayPoint";
  414. cmbOrderPoint.SelectedIndex = 0;
  415. Вывод в комбобокс с добавлением через цикл
  416. List<Raions> raions = Base.baseDate.Raions.ToList(); // Заполнение списка районов
  417. cbFilterRaion.Items.Add("Все районы");
  418. foreach(Raions raion in raions)
  419. {
  420. cbFilterRaion.Items.Add(raion.RaionName);
  421. }
  422. cbFilterRaion.SelectedIndex = 0;
  423. Вывод записей 15 из 47
  424. 1. 15
  425. private void tblast_Loaded(object sender, RoutedEventArgs e)
  426. {
  427. List<Product> products = db.tbe.Product.ToList();
  428. tblast.Text = lvProduct.Items.Count.ToString();
  429. lvProduct.ItemsSource = products;
  430. }
  431. 2. 47
  432. private void tbFirst_Loaded(object sender, RoutedEventArgs e)
  433. {
  434. List<Product> products = db.tbe.Product.ToList();
  435. tbFirst.Text = db.tbe.Product.ToList().Count().ToString();
  436. lvProduct.ItemsSource = products;
  437. }
  438. -----------------
  439. Фильтрация и сортировка
  440. -----------------
  441. <GroupBox Header="Сортировка товаров">
  442. <ComboBox Name="cmbSorted" SelectionChanged="cmbSorted_SelectionChanged">
  443. <ComboBoxItem Content="По умолчанию"/>
  444. <ComboBoxItem Content="По возрастанию стоимости"/>
  445. <ComboBoxItem Content="По убыванию стоимости"/>
  446. </ComboBox>
  447. </GroupBox>
  448. <GroupBox Header="Фильтрация товаров">
  449. <ComboBox Name="cmbFiltres" SelectionChanged="cmbSorted_SelectionChanged">
  450. <ComboBoxItem Content="Все диапазоны"/>
  451. <ComboBoxItem Content="0-9,99%"/>
  452. <ComboBoxItem Content="10-14,99%"/>
  453. <ComboBoxItem Content="15% и более"/>
  454. </ComboBox>
  455. </GroupBox>
  456. private void filtresMethod() // общий метод сортировки и фильтрации
  457. {
  458. List<Product> products = db.tbe.Product.ToList();
  459. if (cmbSorted.SelectedItem != null)
  460. {
  461. ComboBoxItem comboBoxItem = (ComboBoxItem)cmbSorted.SelectedItem;
  462. switch (comboBoxItem.Content)
  463. {
  464. case "По умолчанию":
  465. {
  466. products = products;
  467. break;
  468. }
  469. case "По возрастанию стоимости":
  470. {
  471. products = products.OrderBy(x => x.ProductCost).ToList();
  472. break;
  473. }
  474. case "По убыванию стоимости":
  475. {
  476. products = products.OrderByDescending(x => x.ProductCost).ToList();
  477. break;
  478. }
  479. }
  480. }
  481. if (cmbFiltres.SelectedItem != null)
  482. {
  483. ComboBoxItem comboBoxItem = (ComboBoxItem)cmbFiltres.SelectedItem;
  484. switch (comboBoxItem.Content)
  485. {
  486. case "Все диапазоны":
  487. {
  488. products = products;
  489. break;
  490. }
  491. case "0-9,99%":
  492. {
  493. products = products.Where(x => x.ProductDiscountAmount >= 0 && x.ProductDiscountAmount <= 9.99).ToList();
  494. break;
  495. }
  496. case "10-14,99%":
  497. {
  498. products = products.Where(x => x.ProductDiscountAmount >= 10 && x.ProductDiscountAmount <= 14.99).ToList();
  499. break;
  500. }
  501. case "15% и более":
  502. {
  503. products = products.Where(x => x.ProductDiscountAmount >= 15).ToList();
  504. break;
  505. }
  506. }
  507. }
  508. if (tbSearch.Text != null)
  509. {
  510. if (!string.IsNullOrEmpty(tbSearch.Text))
  511. {
  512. products = products.Where(x => x.ProductName.ToLower().Contains(tbSearch.Text)).ToList();
  513. }
  514. }
  515. if (products.Count == 0 || products.Count == null)
  516. {
  517. MessageBox.Show("Отсутствуют критерии, удовлетворяющие результатам поиска!");
  518. }
  519. lvProduct.ItemsSource = products;
  520. tblast.Text = lvProduct.Items.Count.ToString();
  521. }
  522. -----------------
  523. Удаление заказа
  524. -----------------
  525. Получаем UID кнопки, инициализируем объект БД, прогняем по циклу и удаляем
  526. Удаление со смежными таблицами
  527. Button button = (Button)sender;
  528. string id = button.Uid;
  529. Product product = db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == id);
  530. foreach (var item in db.tbe.OrderProduct.Where(x => x.ProductArticleNumber == id))
  531. {
  532. db.tbe.OrderProduct.Remove(item);
  533. }
  534. var result = MessageBox.Show("Подтвердите удаление товара", "Системное диалоговое окно", MessageBoxButton.YesNo, MessageBoxImage.Question);
  535. if(result == MessageBoxResult.Yes)
  536. {
  537. db.tbe.Product.Remove(product);
  538. db.tbe.SaveChanges();
  539. MessageBox.Show("Товар " + product.ProductName + " был удален");
  540. NavigationService.Navigate(new PageProducts(user));
  541. }
  542. else
  543. {
  544. MessageBox.Show("Товар " + product.ProductName + " не удален");
  545. NavigationService.Navigate(new PageProducts(user));
  546. }
  547. -----------------
  548. Изменение товара (создать новое окно)
  549. -----------------
  550. Button button = (Button)sender;
  551. string id = button.Uid;
  552. Product product = db.tbe.Product.FirstOrDefault(x => x.ProductArticleNumber == id);
  553. WindowChangeProduct windowChangeProduct = new WindowChangeProduct(product);
  554. windowChangeProduct.Show();
  555. windowChangeProduct.Closing += (bin, args) => // при закрытии окна применяем возможные изменения
  556. {
  557. NavigationService.Navigate(new PageProducts(user));
  558. lvProduct.ItemsSource = db.tbe.Product.ToList();
  559. };
  560. -----------------
  561. В самом окне windowChangeProduct создаем объекты текстбоксов, в коде следующее:
  562. В инициализации
  563. tbProductName.Text = product.ProductName;
  564. tbProductDescription.Text = product.ProductDescription;
  565. cmbProductSupplier.ItemsSource = db.tbe.supplier.ToList();
  566. cmbProductSupplier.SelectedValuePath = "idSupplier";
  567. cmbProductSupplier.DisplayMemberPath = "supplierName";
  568. cmbProductSupplier.SelectedValue = product.idSupplier.ToString();
  569. tbOldPrice.Text = product.ProductCost.ToString();
  570. tbSale.Text = product.ProductDiscountAmount.ToString();
  571. в кнопке для изменения
  572. if(!string.IsNullOrEmpty(tbProductName.Text) && !string.IsNullOrEmpty(tbProductDescription.Text) && !string.IsNullOrEmpty(tbOldPrice.Text) && !string.IsNullOrEmpty(tbSale.Text) && cmbProductSupplier.SelectedIndex != null && cmbProductSupplier != null)
  573. {
  574. product.ProductName = tbProductName.Text;
  575. product.ProductDescription = tbProductDescription.Text;
  576. product.idSupplier = Convert.ToInt32(cmbProductSupplier.SelectedValue);
  577. product.ProductCost = Convert.ToDecimal(tbOldPrice.Text);
  578. product.ProductDiscountAmount = Convert.ToInt32(tbSale.Text);
  579. db.tbe.SaveChanges();
  580. this.Close();
  581. MessageBox.Show("Готово");
  582. }
  583. -----------------
  584. Добавление товара. Создаем нужны поля в разметке
  585. В инициализации определяем комбобоксы
  586. cmbCategory.ItemsSource = db.tbe.ProductCategory.ToList();
  587. cmbCategory.SelectedValuePath = "ProductCategoryID";
  588. cmbCategory.DisplayMemberPath = "ProductCategoryName";
  589. cmbManufacturer.ItemsSource = db.tbe.manufacture.ToList();
  590. cmbManufacturer.SelectedValuePath = "idManufacture";
  591. cmbManufacturer.DisplayMemberPath = "manufactureName";
  592. cmbEdIzm.ItemsSource = db.tbe.edIzm.ToList();
  593. cmbEdIzm.SelectedValuePath = "idEdIzm";
  594. cmbEdIzm.DisplayMemberPath = "edenicaizm";
  595. cmbSupplier.ItemsSource = db.tbe.supplier.ToList();
  596. cmbSupplier.SelectedValuePath = "idSupplier";
  597. cmbSupplier.DisplayMemberPath = "supplierName";
  598. addProduct.Background = (SolidColorBrush)new SolidColorBrush(Color.FromRgb(73, 140, 81));
  599. В кнопке добавления проверяем все условия на !null и !string.IsNullOrEmpt? а после
  600. Product product = new Product();
  601. product.ProductArticleNumber = tbArcticle.Text;
  602. product.ProductName = tbNameProduct.Text;
  603. product.ProductDescription = tbDescriptionProduct.Text;
  604. product.ProductCategory = Convert.ToInt32(cmbCategory.SelectedValue);
  605. product.ProductManufacturer = Convert.ToInt32(cmbManufacturer.SelectedValue);
  606. product.ProductCost = Convert.ToDecimal(tbCost.Text);
  607. product.ProductDiscountAmount = Convert.ToInt32(tbSale.Text);
  608. product.ProductQuantityInStock = Convert.ToInt32(tbQuantity.Text);
  609. product.ProductStatus = null;
  610. product.idEdIzm = Convert.ToInt32(cmbEdIzm.SelectedValue);
  611. product.maxDiscount = Convert.ToInt32(tbMaxDiscount.Text);
  612. product.idSupplier = Convert.ToInt32(cmbSupplier.SelectedValue);
  613. product.ProductPhoto = null;
  614. db.tbe.Product.Add(product);
  615. db.tbe.SaveChanges();
  616. MessageBox.Show("Товар был успешно добавлен");
  617. this.Close();
  618. -----------------
  619. -----------------
  620. Капча второе окно с выводом картинки:
  621. <Grid>
  622. <StackPanel HorizontalAlignment="Center" Orientation="Vertical">
  623. <Image Name="CaptchaImage" Height="100" Width="150"></Image>
  624. <TextBox BorderBrush="Black" Name="tbCheckedCaptcha"></TextBox>
  625. <Button Background="#498c51" Content="Проверить" Click="Button_Click"></Button>
  626. </StackPanel>
  627. </Grid>
  628. public partial class Captcha : Window
  629. {
  630. public static bool checkedCaptcha;
  631. int num = 0;
  632. public Captcha()
  633. {
  634. InitializeComponent();
  635. CreateImg();
  636. }
  637. private void CreateImg()
  638. {
  639. Random random = new Random();
  640. num = random.Next(1000, 9999);
  641. var pixels = new byte[Convert.ToInt32(CaptchaImage.Width) * Convert.ToInt32(CaptchaImage.Height) * 4];
  642. random.NextBytes(pixels);
  643. BitmapSource bitmapSource = BitmapSource.Create(Convert.ToInt32(CaptchaImage.Width), Convert.ToInt32(CaptchaImage.Height), 96, 96, PixelFormats.Bgra32, null, pixels, Convert.ToInt32(CaptchaImage.Width) * 4);
  644. var visual = new DrawingVisual();
  645. using (DrawingContext drawingContext = visual.RenderOpen())
  646. {
  647. drawingContext.DrawText(
  648. new FormattedText(num.ToString(), CultureInfo.InvariantCulture, FlowDirection.LeftToRight,
  649. new Typeface("Arial"), 100, System.Windows.Media.Brushes.Red), new System.Windows.Point(0, CaptchaImage.Height / 2));
  650. drawingContext.DrawImage(bitmapSource, new Rect(0, 0, 256, 256));
  651. }
  652. var image = new DrawingImage(visual.Drawing);
  653. CaptchaImage.Source = image;
  654. }
  655. private void Button_Click(object sender, RoutedEventArgs e)
  656. {
  657. if(num == Convert.ToInt32(tbCheckedCaptcha.Text))
  658. {
  659. if (!string.IsNullOrEmpty(tbCheckedCaptcha.Text))
  660. {
  661. MessageBox.Show("Код введен верно.");
  662. AuthorizationPage.checkedCaptcha = true;
  663. this.Close();
  664. }
  665. else
  666. {
  667. MessageBox.Show("Введите код для капчи");
  668. }
  669. }
  670. else
  671. {
  672. MessageBox.Show("Код введен неверно.");
  673. AuthorizationPage.checkedCaptcha = false;
  674. this.Close();
  675. }
  676. }
  677. }
  678. -----------------
  679. Классы
  680. -----------------
  681. Article
  682. public class Article
  683. {
  684. public string article
  685. {
  686. get;
  687. set;
  688. }
  689. public int count
  690. {
  691. get;set;
  692. }
  693. }
  694. -----------------
  695. db
  696. class db
  697. {
  698. public static Entities tbe;
  699. }
  700. -----------------
  701. Frame
  702. class MainFrame
  703. {
  704. public static Frame frame;
  705. }
  706. -----------------
  707. PartialEditedOrder - парш на смена цвета смену цвета
  708. -----------------
  709. public partial class Product
  710. {
  711. public SolidColorBrush colorBrushes
  712. {
  713. get
  714. {
  715. if (ProductQuantityInStock > 3)
  716. {
  717. SolidColorBrush scb = (SolidColorBrush)new BrushConverter().ConvertFromString("#20b2aa");
  718. return scb;
  719. }
  720. else
  721. {
  722. SolidColorBrush scb1 = (SolidColorBrush)new BrushConverter().ConvertFromString("#ff8c00");
  723. return scb1;
  724. }
  725. }
  726. }
  727. }
  728. -----------------
  729. PartialProduct. Вывод скидки товра. Вывод скидка товара. Закрашивание на ListView
  730. -----------------
  731. public double ActualPrice
  732. {
  733. get
  734. {
  735. if (ProductDiscountAmount != null)
  736. {
  737. double ammount = Convert.ToDouble(ProductCost) - Convert.ToDouble(ProductCost) / 100 * Convert.ToDouble(ProductDiscountAmount);
  738. return ammount;
  739. }
  740. else
  741. {
  742. return Convert.ToDouble(ProductCost);
  743. }
  744. }
  745. }
  746. public SolidColorBrush colorBrush
  747. {
  748. get
  749. {
  750. if (ProductDiscountAmount > 15)
  751. {
  752. SolidColorBrush solidColorBrush = new SolidColorBrush(Color.FromRgb(127, 255, 0));
  753. return solidColorBrush;
  754. }
  755. else
  756. {
  757. SolidColorBrush solidColorBrush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
  758. return solidColorBrush;
  759. }
  760. }
  761. }
  762. -----------------
  763. Объединение ФИО В одно
  764. public partial class User
  765. {
  766. public string FullName
  767. {
  768. get
  769. {
  770. return UserSurname + " " + UserName + " " + UserPatronymic;
  771. }
  772. }
  773. }
  774. -----------------
  775. SaleClass
  776. -----------------
  777. public class SaleClass
  778. {
  779. public Order order { get; set; }
  780. public double Sale { get; set; }
  781. }
  782. -----------------
  783. SummClass
  784. public class SummClass
  785. {
  786. public Order order { get; set; }
  787. public int Summa { get; set; }
  788. public double
  789. SALE { get; set; }
  790. }
  791. -----------------
  792. Объединение городов в комбобокс на странице WindowOrder
  793. public partial class Point
  794. {
  795. public string displayPoint
  796. {
  797. get
  798. {
  799. string str = indexPoint.ToString() + " " + cityPoint + " " + streetPoint + " " + homePoint.ToString();
  800. return str;
  801. }
  802. }
  803. }
  804. -----------------
  805. Тут ведется вывод старой цены и новой цены с учетом скидки
  806. <StackPanel Orientation="Horizontal">
  807. <TextBlock Text=" "></TextBlock>
  808. <TextBlock Text="{Binding ProductCost, StringFormat={}{0:0}}" TextDecorations="Strikethrough" Uid="{Binding ProductDiscountAmount}" Loaded="TextBlock_Loaded"/>
  809. <TextBlock Text=" "></TextBlock>
  810. <TextBlock Text="{Binding ActualPrice, StringFormat={}{0:0}руб.}"/>
  811. </StackPanel>