Креирати апликацију која приказује поручене производе из базе података 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();
}
}
}