Skip to content

Задатак за вежбу

Креирати апликацију која приказује поручене производе из базе података Northwind сортиране по броју поручених јединица (UnitsOnOrder). Резултате приказати у листбоксу и на графикону типа Column. Претпоставља се да корисник програма НЕЋЕ уносити погрешне типове података и да ће користити опције програма ИСПРАВНО, па за овај контролни није потребно обрађивати грешке.

ПРАВИЛНО КОРИШЋЕЊЕ АПЛИКАЦИЈЕ

  • За унос новог производа корисник попуњава поља ProductName и UnitsOnOrder и притиска дугме УНЕСИ
  • Уносом броја у поље ProductID попуњавају се текст боксови ProductName и UnitsOnOrder, па корисник може да измени или да избрише постојеће податке кликом на дугмад ИЗМЕНИ или ОБРИШИ.

Ускладиштена процедура користи акцију 0 за приказ података за лист бокс и графикон, акцију 1 за унос новог податка, акцију 2 за приказ података у текст боксовима 2 и 3, акцију 3 за измену података и акцију 4 за брисање података.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Poruceni]
@akcija AS INT = null, @pID AS INT = null, @pName AS VARCHAR(40) = null, @uOrder AS SMALLINT = null AS
 
IF(@akcija=0)
BEGIN
SELECT ProductID, ProductName, UnitsOnOrder FROM Products WHERE UnitsOnOrder != 0 ORDER BY UnitsOnOrder DESC
END
 
IF(@akcija=1)
BEGIN
INSERT INTO Products(ProductName, UnitsOnOrder) VALUES (@pName, @uOrder)
END

IF(@akcija=2)
BEGIN
SELECT * FROM Products AS p WHERE p.ProductID=@pID OR @pID IS NULL
END

IF(@akcija=3)
BEGIN
UPDATE Products SET ProductName=@pName, UnitsOnOrder=@uOrder WHERE ProductID=@pID
END

IF(@akcija=4)
BEGIN
DELETE FROM Products WHERE ProductID=@pID
END

Konekcija.cs

using System.Data;
using System.Data.SqlClient;

namespace PeticaSaListom
{
    class Konekcija
    {
        public static SqlCommand GetCommand()
        {
            SqlConnection con = new SqlConnection("Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            return cmd;
        }
    }
}

Poruceni.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace PeticaSaListom
{
    class Poruceni
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public short UnitsOnOrder { get; set; }

        public string Prikaz
        {
            get { return ToString(); }
        }

        public override string ToString()
        {
            return String.Format("{0,-5}{1,-40}{2,-5}", this.ProductID, this.ProductName, this.UnitsOnOrder);
        }

        public void InicijalizujPolja(DataRow dr)
        {
            this.ProductID = (int)dr["ProductID"];
            this.ProductName = (string)dr["ProductName"];
            this.UnitsOnOrder = (short)dr["UnitsOnOrder"];
        }

        public Poruceni() { }

        public Poruceni(DataRow dr)
        {
            this.InicijalizujPolja(dr);
        }

        public static DataTable Tabela()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandText = "usp_Poruceni";
            cmd.Parameters.AddWithValue("@akcija", 0);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            cmd.Connection.Open();
            da.Fill(dt);
            cmd.Connection.Close();
            return dt;
        }

        public static List<Poruceni> Lista()
        {
            DataTable dt = Tabela();
            List<Poruceni> lista = new List<Poruceni>();
            foreach (DataRow dr in dt.Rows)
                lista.Add(new Poruceni(dr));
            return lista;
        }

        public void Unesi()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandText = "usp_Poruceni";
            cmd.Parameters.AddWithValue("@akcija", 1);
            cmd.Parameters.AddWithValue("@pName", this.ProductName);
            cmd.Parameters.AddWithValue("@uOrder", this.UnitsOnOrder);
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }

        public Poruceni(int pID)
        {
            this.ProductID = pID;
            this.Ucitaj();
        }

        public void Ucitaj()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandText = "usp_Poruceni";
            cmd.Parameters.AddWithValue("@akcija", 2);
            cmd.Parameters.AddWithValue("@pID", this.ProductID);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            cmd.Connection.Open();
            da.Fill(dt);
            this.InicijalizujPolja(dt.Rows[0]);
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }

        public void Izmeni()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandText = "usp_Poruceni";
            cmd.Parameters.AddWithValue("@akcija", 3);
            cmd.Parameters.AddWithValue("@pID", this.ProductID);
            cmd.Parameters.AddWithValue("@pName", this.ProductName);
            cmd.Parameters.AddWithValue("@uOrder", this.UnitsOnOrder);
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }

        public void Obrisi()
        {
            SqlCommand cmd = Konekcija.GetCommand();
            cmd.CommandText = "usp_Poruceni";
            cmd.Parameters.AddWithValue("@akcija", 4);
            cmd.Parameters.AddWithValue("@pID", this.ProductID);
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }
    }
}

Form1.cs

using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace PeticaSaListom
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = String.Format("{0,-5}{1,-40}{2,-5}", "ID", "ProductName", "UnitsOnOrder");
            PopuniPodatke();
            NacrtajGrafikon();
        }

        private void PopuniPodatke()
        {
            listBox1.DisplayMember = "Prikaz";
            listBox1.ValueMember = "ProductID";
            listBox1.DataSource = Poruceni.Lista();
            listBox1.SelectedIndex = -1;
            textBox2.Text = "";
            textBox3.Text = "";
            textBox1.Text = "";
        }

        private void NacrtajGrafikon()
        {
            chart1.DataSource = Poruceni.Tabela();
            chart1.Series["Series1"].ChartType = SeriesChartType.Column;
            chart1.Series["Series1"].XValueMember = "ProductName";
            chart1.Series["Series1"].YValueMembers = "UnitsOnOrder";
            chart1.Series["Series1"].IsValueShownAsLabel = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Poruceni p = new Poruceni();
            p.ProductName = textBox2.Text;
            p.UnitsOnOrder = Convert.ToInt16(textBox3.Text);
            p.Unesi();
            PopuniPodatke();
            NacrtajGrafikon();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text == String.Empty)
                PopuniPodatke();
            else
            {
                Poruceni p = new Poruceni(Convert.ToInt32(textBox1.Text));
                p.Ucitaj();
                textBox1.Text = p.ProductID.ToString();
                textBox2.Text = p.ProductName;
                textBox3.Text = p.UnitsOnOrder.ToString();
                listBox1.SelectedValue = Convert.ToInt32(textBox1.Text);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Poruceni p = new Poruceni(Convert.ToInt32(textBox1.Text));
            p.ProductName = textBox2.Text;
            p.UnitsOnOrder = Convert.ToInt16(textBox3.Text);
            p.Izmeni();
            PopuniPodatke();
            NacrtajGrafikon();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Poruceni p = new Poruceni(Convert.ToInt32(textBox1.Text));
            p.Obrisi();
            PopuniPodatke();
            NacrtajGrafikon();
        }
    }
}