» »

Baza & c#

Baza & c#

puncka ::

Živjo!

Sem odprla kar novo temo, ker pričakujem, da bom imela kar nekaj vprašanj okoli svojega problema. Torej... imam neko bazo oseb in uspe mi priti do vseh naenkrat, a ko želim priti do točno določene (izbrane - slika) in z njo še kaj narest, pa ne znam. Prilagam sliko.




najlepša hvala

tarja ::

Delo s podatki
tuki ene par fajnih zadev na to temo piše ;)

puncka ::

Hehe ja.. jih tudi mi mamo :) Ampak mi ne rata. S tem nekako: row = minISDataSet1.Oseba.FindByEMŠO(7); ta nam vrne če prav razumem osebo z emšo 7. No jaz bi rada, da v row shrani trenutno izbrano vrstico, a še kar ne gre.

KalEl ::

Lahko malce razjasniš problem? Ti bi rada, da dobiš indeks izbrane vrstice ali kaj drugega? Če je možno, bi prosil za malce kode, kjer je problem pa ti z veseljem pomagam.
Lp,
B.

puncka ::

To kar je na sliki zgoraj je npr. ena oseba (shranjena v tabeli Oseba). Ko pritisnem gumb bi želela, da se ta trenutna oseba shrani v novo tabelo Tekmovanje. V dataSetu so shranjene vse tabelce (tudi tekmovanje in oseba). Ali moram s pomočjo dataAdapterja nekako to narediti?

Nato sem poskusila dodati v Tekmovanje kako novo vrstico, ravno toliko da vidim, da dodajanje sploh dela:

mojDataSet.TekmovanjeRow row1;

row1 = minISDataSet.Tekmovanje.NewTekmovanjeRow();
row1.EMŠO = 10;
mojDataSet.Tekmovanje.AddTekmovanjeRow(row1);

tableAdapterManager.UpdateAll(mojDataSet);

Ampak Tekmovanje ostane kr prazno kot na začetku.

xardas ::

No, pa pojdimo lepo od začetka te naloge. Hvaležen bi bil vsakomur, ki bi nam pomagal dopolnit podatkovni model baze.Časa ni več veliko, pomoč smo iskali pri asistentu, vendar ta že nekaj dni ne odgovarja.

Besedilo naloge:

Podatkovni model
Za izvedbo dirke je potrebno dopolniti obstoječi podatkovni model:
 osnovni podatkovni model

osnovni podatkovni model



Model namreč ne omogoča implementacije informacijske podpore izvedbe dirke v celoti. Podatkovni model in podatkovno bazo lahko izdelate s skupnimi močmi (npr. forum, sestanki). Izdelano podatkovno bazo se lahko objavi na eUčilnici.

Prijave
Prijave na dirko bodo odprte od 15. decembra 2010 do 22. decembra 2010. Na dirko so se v preteklosti prijavljali vozniki iz Slovenije, Italije, Hrvaške, Avstrije in Madžarske (možne pa so tudi izjeme). Vozniki lahko tekmujejo v največ dveh različnih kategorijah, za vsako pa prijavijo drugo vozilo:

oCestni avtomobili
oMotokros
oTerenska vozila
Vsaka kombinacija voznik/kategorija oz. voznik/vozilo mora imeti svojo štartno številko. Vozniki tekmujejo sami, navigatorjev ni.

Predlogi za obrazce:

•Urejanje različnih šifrantov.
•Prijava voznikov.
•Prijava vozil.
•Ipd.
Izvedba dirke
Pred startom vsake kategorije je potrebno preveriti dejansko prisotne na startni črti. Odstope in čase se v MinIS vpisuje ročno.

Predlogi za obrazce:

•Urejanje prisotnih na startni črti.
•Vnos časov.
•Ipd.
Pregled rezultatov
Po zaključeni dirki se podeljuje nagrade v vsaki kategoriji in razglasi absolutnega zmagovalca terenskih kategorij (motokros in terenska vozila). Izmed voznikov, ki so odstopili, se izžreba tolažilna nagrada Srečni luz'r – all inclusive vikend paket v slovenskih toplicah po voznikovi izbiri s K.K.

Predlogi za obrazce:

•Izpis rezultatov po kategorijah.
•Izpis absolutnih rezultatov.
•Izpis voznikov, ki so odstopili.
•Žrebanje tolažilne nagrade.
•Ipd.
Naloga
Vaša naloga je implementirati tri obrazce za podporo dirki po vaši izbiri v ogrodju MinIS z vaj. En obrazec naj podpira prijavo, drugi izvedbo dirke in tretji pregled rezultatov. Pri tem se ne omejujte zgolj na naštete predloge obrazcev.

Pri izdelavi obrazcev uporabite na vajah omenjene koncepte povsod, kjer je to smiselno. V rešitvi morate imeti vsaj en primer uporabe vsakega izmed konceptov:

•Master/Detail
•Lookup
•Sestavljena polja
•Uporaba parametrov

Zgodovina sprememb…

  • spremenilo: xardas ()

KalEl ::

xardas je izjavil:

No, pa pojdimo lepo od začetka te naloge. Hvaležen bi bil vsakomur, ki bi nam pomagal dopolnit podatkovni model baze.


Jz bi naredil nekaj takega (če na hitro narišem):
 primer podatkovne baze

primer podatkovne baze



Oseba je vezana na državo, ker je iz različnih držav lahko prijava. Imamo novo tabelo za tekmovanje, ki ima tudi prijavni čas (Od - Do). Imamo pa vmesno tabelo za prijave, ki je vezana na uporabnika in kategorijo (skupaj tvorita primary key) in pa vezavo na tekmovanje ter štartno številko. Odvisno pa je tudi, kaj od vas želi.

Primer MS SQL skripte je na tem naslovu.
Lp,
B.

xardas ::

Hvala za pomoč.

Sedaj pa imam drugi problem.

Imam dva mdi childa. V enem imam dataGridView, ki ima tudi atribut Prisotnost.

Zanima me, kako bi lahko v drugem mdi childu, s pomočjo dataGridViewa, izpisal samo tiste vrstice, ki imajo Prisotnost nastavljeno na "DA"?

Obrazec izgleda takole

Zgodovina sprememb…

  • spremenilo: xardas ()

KalEl ::

Sem spisal primer. Najdeš ga tukaj.

Uporabil sem generičen seznam kot podatkovni vir (razred Student) in prikazovanje vrednosti iz enega child-a v drugega glede na izbrane vrednosti. Uporabil sem kar gumb in njegov event Click, se pa da kodo spremenit, da se uporabljajo event-i GridView kontrole.

Če kaj ni jasno, vprašaj. Sem pa pokomentiral kodo :)
Lp,
B.

xardas ::

Najlepša hvala za primer. Ga bom preučil.:D

Težavo mi je uspelo rešiti z uporabo lastnosti Filter (imeStolpca = vrednost), ki jo najdemo pod bindingNavigatorjem tabele, ki jo prikazujemo v dataGridViewu.

puncka ::

Živjo,

spet bi rabila vašo pomoč. V spodnji sliki je predstavljena baza, ki jo imam trenutno. Zanima me, kako bi lahko izpisala vse izdelke, ki jih je določena stranka kupila. Prek master/detail koncepta mi uspe povezati največ dve tabeli (prek tujega ključa), ne vem pa, kako bi se pa 4-ih lotila. Stranke naj bi pa izbirala iz dropmenuja.

Zaenkrat imam gridview in tam zapisano poizvedbo:
SELECT [Order Details].ProductID, Products.ProductName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE ([DropDownList1.CustomerID] = @Customers.CustomerID)

Tale pogoj v WHERE me matra...

Hvala

Zgodovina sprememb…

  • spremenila: puncka ()

KalEl ::

puncka je izjavil:

Živjo,
Zaenkrat imam gridview in tam zapisano poizvedbo:
SELECT [Order Details].ProductID, Products.ProductName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE ([DropDownList1.CustomerID] = @Customers.CustomerID)

Tale pogoj v WHERE me matra...



Where stavek je narobe napisan. Tole ti zna pomagat (nisem pa preizkusil):

SELECT [Order Details].ProductID, Products.ProductName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE Customers.CustomerID = DropDownList1.SelectedValue

Vrednost pri SQL je vedno na desni strani. DropDownList1.SelectedValue je lastnost, ki potegne vrednost, ki je v določenem izbranem list item-u nastavljena kot DataValueField. Recimo, da imaš nastavljen DataTextValue in DataFieldValue.

Če ti ni jasno, ti lahk sample na podlagi tvojega napišem kot primer.
Lp,
B.

puncka ::

Sem probala pa ne dela. Izpiše mi to napako: The multi-part identifier "DropDownList1.SelectedValue" could not be bound. Tudi če grem v query builder, mi sploh ne ponudi kake take opcije, le tabele.

Še eno nepovezano vprašanje z naslovom teme: kako pridemo do toolstrip textboxa? Je to poseben gradnik ali moramo neko lastnost določiti navadnemu textboxu, nikakor mi ne rata ga najti.

Zgodovina sprememb…

  • spremenila: puncka ()

KalEl ::

Sem ti naredil primer (v app.config spremeni username in pass za dostop do podatkovne baze).

Najbolj enostavno je, da v DataSet-u narediš query (v query builderju - v Where stavek dodaj parameter (@customerID)), ga poimenuješ ter ga potem kličeš v kodi s parametrom, ki si ga nastavila. Ta parameter potem spreminjaš v kodi po želji.

Ker filtriraš s pomočjo dropdown-a, izkoristi njegov event SelectedIndexChanged, kjer mu podaš spremenjeni podatek, ki se nahaja v SelectedValue.
Lp,
B.

puncka ::

Page_Load ...
this.customersTableAdapter.Fill(this.dataSet1.Customers);
this.productsTableAdapter.FillByCustomerProducts(this.dataSet1.Products, DropDownList3.SelectedValue.ToString());

protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
{     
    this.productsTableAdapter.FillByCustomerProducts(this.dataSet1.Products, DropDownList3.SelectedValue.ToString());
}


Od kode je zaenkrat to. Ampak ni mi jasno, kako v gridView naložiti te podatke (oz. kako ve, kje jih prikazati). Če gridViewu dodam nek nov datasource, zahteva spet neko poizvedbo ... a je potrebno v GV kak pogoj v where dati ...?
Delam sicer web page ... In ni se mi uspelo povezati v tvojo bazo (kodo in obliko sem pa le pogledala).

KalEl ::

Je kakšen poseben razlog, da uporabljaš dataset? Predlagam, da rajši uporabiš Entity Framework ali pa LINQ to SQL, v kolikor uporabljaš MS SQL. GridView komponenta zna prikazati podatke na na več načinov. Prvi pogoje, ki ga moraš upoštevat, je da mu poveš, katere podatke mora prikazovati. Npr. če želiš, da sam ugotovi, kateri podatke mu daješ, uporabi AutoGenerateColumns=true (na tem linku je tudi primer, če je false in sama določiš stoplce), če pa želiš specifične stoplce, daš ta property na false, in potem sama določiš stolpce v HTML pogledu.

V tem primeru, ki sem ga dal, je primer Windows Forms aplikacije. Uporabljam pa Northwind podatkovno bazo. Če jo imaš nameščeno, spremeniš connection string (na tejle strani so podani connection string-i za različne podatkovne vire).

Za gridview je pa tako. Ko vežeš enkrat gor podatkovne vire, je odvisno od tega, kaj tvoj podatkovni vir vrača. V kolikor imaš v podatkovnem viru nastavljen where pogoj, ti tega ni treba nastavljati na kontroli, ampak samo vežeš podatke. Ko končaš z where pogojem, moraš poskrbet, da GridView poveže podatke, torej v kodi pokličeš TvojeImeInstanceGridView.DataBind();
Lp,
B.

puncka ::

Dataset uporabljam, ker smo tega uporabljali na vajah na faksu.

Zaenkrat sem naredila naslednje:
Dodam en dropDownList in en gridView. Na dropDownu določim pod. vir stranke (ID in companyName-vrednost, ki jo prikazuje).
Nato ustvarim novo poizvedbo v tableAdapterju v "products":
SELECT        Products.ProductID, Products.ProductName, Products.SupplierID, Products.CategoryID, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, 
                         Products.UnitsOnOrder, Products.ReorderLevel, Products.Discontinued, Customers.CustomerID, Orders.CustomerID AS Expr1, Orders.OrderID, 
                         [Order Details].ProductID AS Expr2, [Order Details].OrderID AS Expr3
FROM            Products INNER JOIN
                         [Order Details] ON Products.ProductID = [Order Details].ProductID INNER JOIN
                         Orders ON [Order Details].OrderID = Orders.OrderID INNER JOIN
                         Customers ON Orders.CustomerID = Customers.CustomerID
WHERE        (Customers.CustomerID = @customerID)

To je kopirana tvoja poizvedba. In še koda, ki sem jo napisala:

public partial class ImeP_Novo: System.Web.UI.Page
{
    DataSet1 dataSet1 = new DataSet1();
    DataSet1TableAdapters.CustomersTableAdapter customersTableAdapter = new DataSet1TableAdapters.CustomersTableAdapter();
    DataSet1TableAdapters.ProductsTableAdapter productsTableAdapter = new DataSet1TableAdapters.ProductsTableAdapter();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        this.customersTableAdapter.Fill(this.dataSet1.Customers);
        this.productsTableAdapter.FillByCustomerProducts(this.dataSet1.Products, DropDownList1.SelectedValue.ToString());
    
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.productsTableAdapter.FillByCustomerProducts(this.dataSet1.Products, DropDownList1.SelectedValue.ToString());
    }
}


Kaj je moj naslednji korak, ki ga moram narediti? Precej očitno je, da še kar ne vem, kako bi to poizvedbo prikazala v gridViewu. V GV nimam še nič.

Zgodovina sprememb…

  • spremenila: puncka ()

dolenc ::

Lahko tako narediš da nafilaš vsebino dataSeta v začasno tabelo, potem pa to tabelo uporabiš za DataSource. Tole sem sicer v VBju natipkal, koncept je za c# isti..

adapter.Fill(dataSet, "Create tabelaTemp")

Dim dv As DataView //(ugibam, private dataView dv;)

//Spuca kar ne rabi za sabo
adapter.Dispose()
connection.Close()

//Nastavi source za dataView
dv = dataSet.Tables(0).DefaultView

//butne vsebino v datagridView
DataGridView1.DataSource = dv

puncka ::

Se mi zdi, da mi je večina dela že ratala, samo mi pri sql poizvedbi javlja napako in sicer pri "AS".

SELECT ProductID, ProductName
FROM Products
WHERE Customers.CustomerID=@ AS stranka AND stranka=Orders.CustomerID
Orders.OrderID=[Order Details].OrderID AND 
[Order Details].ProductID=Products.ProductID


Naj ponovim, da si stranko izberemo iz dropDown menuja.

EDIT: Ah... saj query builder naredi vse sam, samo uporabiti ga je treba :)

Zgodovina sprememb…

  • spremenila: puncka ()

videc ::

@puncka: a mi lahko poveš katero kontrolo si uporabila za premikanje po zapisih?

xardas ::

Zdravo,

imam tole vajo, ki mi ne dela..

// Vaja 30
DataSet1 dataSet1 = new DataSet1();
DataSet1TableAdapters.ZnamkaTableAdapter
znamkaTableAdapter = new
DataSet1TableAdapters.ZnamkaTableAdapter();
// Dodajanje znamke v DataSet
dataSet1.Znamka.AddZnamkaRow(TextBox1.Text);
// Posodobitev podatkovne baze in prikaz uspeha
if (znamkaTableAdapter.Update(dataSet1) == 1)
{
TextBox1.Enabled = false;
Button1.Visible = false;
Label2.Text = "Znamka je bila dodana.";
}
else
{
Label2.Text = "Napaka! Znamka ni bila dodana.";
}


Ne dobi mi tableAdapterja. Mogoče kdo ve, kaj bi lahko bilo narobe?

Zgodovina sprememb…

  • spremenilo: xardas ()

xardas ::

Po dodajanju tabele na dataset je potrebno Rebuildat projekt...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# težava

Oddelek: Programiranje
233470 (2316) mladec
»

[C#,SQL]

Oddelek: Programiranje
51143 (1056) JanOlMajti
»

DataView, DataTable, DataSet

Oddelek: Programiranje
91088 (839) detroit
»

[C#/VS] connection to DB

Oddelek: Programiranje
5946 (838) KalEl
»

[ASP.NET] problem

Oddelek: Izdelava spletišč
382036 (1686) Microsoft

Več podobnih tem