Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 11.03.2010., 12:12   #1
high5
Registered User
 
Datum registracije: Aug 2009
Lokacija: N/A
Postovi: 46
c#, datagrid, remove row

Pozz ljudi.

Imam problem u vezi uklanjanja reda u datagridu. Na datagridview sam dodao jednu tablicu ("Proizvod") iz baze podatka(ms sql). Napravio sam button delete i dodao mu ovaj kod;

dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);

Ovaj kod radi, tj ukloni red, al je problem u tome sto se naravno ne odrazi i na bazu podataka gdje taj uklonjeni red jos uvjek postoji u tablici "Proizvod".


Pokusavao sam nesto preko SQL DELETE funkcije, al ne ide nikako, tocnije, ne znam kako definirat da obrise tocno onaj red na koji sam kliknuo mišem.

Pitanje je naravno kako da se taj red ukloni i u bazi podataka?
high5 je offline   Reply With Quote
Staro 11.03.2010., 13:04   #2
doublev
the letter
Moj komp
 
doublev's Avatar
 
Datum registracije: Sep 2005
Lokacija: 127.0.0.1
Postovi: 794
Pretpostavimo da imaš:
proizvodBindingSource - Binding Source za tvoju tablicu
proizvodTableAdapter - Table Adapter za tvoju tablicu
myDataSet - DataSet u kojem se nazali tvoja tablica sa nazivom Proizvod

Nakon što pobrišeš redak moraš pozvati EndEdit na Binding Source pa onda na Table Adapteru pozvati Update sa DataSetom kao parametrom:

Code:
proizvodBindingSource.EndEdit();
proizvodTableAdapter.Update(myDataSet.Proizvod);
Ja obično kada brišem radim to ovako:

Code:
MyDataSet.ProizvodiRow row = (MyDataSet.ProizvodiRow)((DataRowView)proizvodBindingSource .Current).Row;
row.Delete();
(primjeti da je MyDataSet ovdje referenciran kao tip a ne kao instanca)

S obzirom da znam i druge stvari raditi sa trenutnim zapisom onda si znam unutar forme gdje se nalazi DataGrid napraviti private property:

Code:
private DeploymentsDataSet.DeploymentsRow CurrentProizvod 
{ 
    get
    {
        return (MyDataSet.ProizvodiRow)((DataRowView)proizvodBindingSource .Current).Row;
    }
}
I onda možeš jednostavno napraviti CurrentProizvod.Delete();
Prije toga bi bilo dobro provjeriti da ti nije CurrentProizvod == null jer ako nije ništa selektirano, bit će null.
__________________
Exception up = new Exception("Illegal operation.");
throw up;
doublev je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 11.03.2010., 16:02   #3
high5
Registered User
 
Datum registracije: Aug 2009
Lokacija: N/A
Postovi: 46
Nisam bas neki napredni korisnik, ne znam jesam li te bas dobro skuzio i dobro odradio. Evo koda pa ako mozes pogledat gdje grijesim;

private void button2_Click(object sender, EventArgs e)
{

string upit = "SELECT * FROM Proizvod";
SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS; AttachDbFilename = D:\\Documents and Settings\\\My Documents\\Visual Studio 2008\\Projects\\proba\\baza.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True");
SqlCommand cmd = new SqlCommand(upit, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);


DataSet dt = new DataSet();
da.Fill(dt);

dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
BindingSource bd = new BindingSource();
bd.DataSource = dt;
bd.EndEdit();
da.Update(dt);
high5 je offline   Reply With Quote
Staro 11.03.2010., 16:53   #4
doublev
the letter
Moj komp
 
doublev's Avatar
 
Datum registracije: Sep 2005
Lokacija: 127.0.0.1
Postovi: 794
Teoretski bi mogao to tako izvesti ali bi morao dataGridView1.DataSource postaviti na binding source kojeg si ovdje kreirao. Ne možeš to izvesti sve u jednom event handleru za button click. Binding source (i kompletan ostali "cjevovod") mora biti instanciran na formi.

Ja obično koristim DataSet designer koji je integriran unutar VS2008.

Predlažem ti da dobro proučiš dokumentaciju koja dolazi sa Visual Studiom. Unutra imaš vrlo dobre How To primjere koje te vode za ručicu step by step. To je jako dobro za početnike. Ovako kako si ti krenuo sa SqlConnectionima i SqlCommandama je ok za jednostavne aplikacije i jednostavne data modele. Ja taj pristup koristim u PowerShell skriptama. Čim ti se model malo proširi, ovakav pristup vrlo brzo postaje vrlo naporan. Kada radiš DataSet i pustiš VS-u da ti kreira Binding Sourceve i Table Adaptere, stvari se puno brže rade.
__________________
Exception up = new Exception("Illegal operation.");
throw up;
doublev je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na