| 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 ProductSaleWhere ProductSale.AgentID = Agent.IDGroup by AgentID) as sumSaleFROM            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();        }    }}
 |