123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Data.SqlClient;
- namespace Prakt2
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- string TxtCon = Properties.Settings.Default.agentRUDConnectionString;
- struct Agent
- {
- public string Title, Type, Phone, Logo, Priority, sumSale;
- }
- List<Agent> LstAgent = new List<Agent>();
- int AgentPerPage = 10; // кол-во записей на страницу
- int startNum = 0; // номер самой первой записи для отображения в DataGridView
- /// <summary>
- /// получить данные из базы данных и сохранить их в список List
- /// </summary>
- void GetDateFromDB()
- {
- SqlConnection con = new SqlConnection(TxtCon);
- con.Open();
- SqlCommand query = new SqlCommand(@"SELECT Agent.Title, AgentType.Title AS TypeOrg, Agent.Phone, Agent.Logo, Agent.Priority, (Select sum(ProductCount)
- from ProductSale
- Where ProductSale.AgentID = Agent.ID
- Group by AgentID) as sumSale
- FROM Agent INNER JOIN
- AgentType ON Agent.AgentTypeID = AgentType.ID", con);
- SqlDataReader res = query.ExecuteReader();
- while(res.Read())
- {
- Agent agent = new Agent();
- agent.Title = res["Title"].ToString();
- agent.Type = res["TypeOrg"].ToString();
- agent.Phone = res["Phone"].ToString();
- agent.Logo = res["Logo"].ToString();
- agent.Priority = res["Priority"].ToString();
- agent.sumSale = res["sumSale"].ToString();
- if (agent.sumSale == "")
- agent.sumSale = "0";
- LstAgent.Add(agent);
- }
- con.Close();
- }
- /// <summary>
- /// вывести данные текущей страницы в DataGridView
- /// </summary>
- void FillDgv()
- {
- dgvAgents.Rows.Clear();
- // перебор записей для вывода в DataGridView
- // startNum - номер первой записи на текущей странице
- // AgentPerPage - кол-во записей для отображения на странице
- for (int i = startNum; i< startNum + AgentPerPage; i++)
- {
- if (i > LstAgent.Count - 1)
- break;
- int procent = 0;
- int sumSale = int.Parse(LstAgent[i].sumSale);
- if (sumSale >= 10 && sumSale < 20)
- procent = 5;
- if (sumSale >= 20 && sumSale < 30)
- procent = 10;
- if (sumSale >= 30 && sumSale < 40)
- procent = 20;
- if (sumSale >= 40)
- procent = 25;
- string Template = $@"{LstAgent[i].Type} | {LstAgent[i].Title}
- {LstAgent[i].sumSale} продаж
- {LstAgent[i].Phone}
- Приоритетность: {LstAgent[i].Priority}";
- try
- {
- // вывести в таблицу логотип агента, данные об агенте и процент скидки для агента
- dgvAgents.Rows.Add(Image.FromFile(Application.StartupPath + "\\"
- + LstAgent[i].Logo), Template, procent + "%\n");
- }
- catch
- {
- // если файл с логотипом агента отсутствует или поврежден, то вывести
- // заглушку из ресурсов
- dgvAgents.Rows.Add(Properties.Resources.picture, Template, procent + "%\n");
- }
- // если у агента есть продажи, то выделить строку с этим агентом зеленым цветом
- if (LstAgent[i].sumSale != "0")
- dgvAgents.Rows[dgvAgents.RowCount - 1].DefaultCellStyle.BackColor = Color.LightGreen;
-
- }
- // кол-во страниц исходя из кол-ва записей на одной странице
- int countpages = LstAgent.Count / AgentPerPage;
- // если есть последняя неполная страница, то увеличить кол-во страниц на одну
- if (LstAgent.Count % AgentPerPage != 0)
- countpages++;
- // очистить панель с закладками от старых меток с номерами страниц
- panelPages.Controls.Clear();
- for (int i = 1; i <= countpages; i++)
- {
- Label lblPage = new Label();
- lblPage.Text = i.ToString();
- // метку со страницей выравнивать по правому краю панели
- lblPage.Dock = DockStyle.Right;
- lblPage.AutoSize = true; // включить AutoSize для автоматического изменения размеров
- // подключить обработчик события Click
- lblPage.Click += LblPage_Click;
- // если выводится номер текущей страницы, то установить для него подчеркивание
- if (i == startNum / AgentPerPage + 1)
- lblPage.Font = new Font(lblPage.Font, FontStyle.Underline);
- // добавить созданную метку на панель
- panelPages.Controls.Add(lblPage);
- }
- }
- private void LblPage_Click(object sender, EventArgs e)
- {
- // прочитать номер страницы с метки, на которой выполнили щелчок
- int n = int.Parse((sender as Label).Text);
- // определить номер первой записи, которая должна отображаться в DatagridView
- startNum = n * AgentPerPage - AgentPerPage;
- // обновить записи в DatagridView
- FillDgv();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- GetDateFromDB();
- FillDgv();
- }
- }
- }
|