[ era1 @ 26.02.2006. 16:33 ] @
Dakle ovako :
imam listBox na formi koji je povezan sa tabelom u bazi. Zatim imam tri dugmeta: ADD, REMOVE i REFRESH .

Program redi sledece:

ADD = doda podatak u bazu (to radi)
REMOVE = obrishe podatak iz baze (takodje radi)
REFRESH = osvezi ListBox ( pomocu CurrencyManager.Refresh() i DataAdapter.Fill() )

problem je sto REFRESH posle ADD radi kako treba, i doda zapis u ListBox, ali posle REMOVE ne radi kako treba i nece da ukloni zapis iz list box-a (iako ga ukloni iz baze)!!!

Sta nije u redu?

Pozdrav svima...
[ mirdraal @ 27.02.2006. 12:04 ] @
Citat:
era1: Dakle ovako :
imam listBox na formi koji je povezan sa tabelom u bazi.


Kako je povezan sa bazom ?
Preko dataset-a ili na neki drugi nacin .
Ako je preko DataSet-a onda je i logicno da ga prikazije posle brisanja
jer podatak jos uvek postoji u DataSet-u samo je markiran za brisanje .
U tom slucaju traba da ili posle brisanja ponovo ucitas DataSet ili da eksplicitno
obrises doticni podatak iz dataset-a ili da koristis recimo
Code:
DataSetxx.DataTableyy.DefaultView.RowStateFilter = .... 

da bi filtrirao slogove koje zelis da prikazes
Ima mnogo nacina , sve zavisi sta ti treba .


[ era1 @ 27.02.2006. 15:54 ] @
Povezan je preko dataseta.

Pokusao sam da ucitam ponovo dataset pomocu DataAdapter.Fill(dataset, "TABELA") pa nije pomoglo, zatim sam pokusao da prvo ocistim dataset DataSet.TABELA.DataRows.Clear() pa da onda odradim Fill ali nije pomoglo.

Pa me interesuje jel ima jos neki nacin da ucitam dataset ?

Posebno ne kontam jednu stvar:
Metoda AcceptChanges() objekta DataSet bi trebala da omoguci prihvatanje promena u dataSetu (znaci da red koji je markiran za brisanje obrishe). Zatim kada pozovem CurrencyManager.BindingContext.refresh() treba sve te promene da prenese na kontrlole na formi. Ali ni to ne radi...

pozdrav...
[ mirdraal @ 28.02.2006. 08:46 ] @
pozabavio sam se malo problemom i napravio jedan primer .
primer je za access Northwind bazu i tablu Categories , zbog jednostavnosti
Konekcija , Adapter i dataset su generisani a povezivanje ListBox-a je preko designera .

Ovde ti refresh i ne treba , sve radi i bez toga


U initializecomponents metodi forme ide sledeci kod ( inace genrisan u dizajneru )

Code:

this.listBox1.DataSource = this.dataSet11.Categories;
            this.listBox1.DisplayMember = "CategoryName";
            this.listBox1.Location = new System.Drawing.Point(36, 24);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(268, 160);
            this.listBox1.TabIndex = 0;
            this.listBox1.ValueMember = "CategoryID";


Glavni deo koda za brisanje i dodavanje je

Code:

static void Main() 
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            this.oleDbDataAdapter1.Fill(this.dataSet11);
        }

        private void buttonAdd_Click(object sender, System.EventArgs e)
        {
            //Add new Category
            DataSet1.CategoriesRow r;
            r = this.dataSet11.Categories.AddCategoriesRow("New Cat","NEw CAT DES");
            this.oleDbDataAdapter1.Update(dataSet11);
            this.dataSet11.AcceptChanges();
            
            
            
        }

        private void buttonRemove_Click(object sender, System.EventArgs e)
        {
            int index ;
            index = this.listBox1.SelectedIndex;
            this.dataSet11.Categories.Rows[index].Delete();
            this.oleDbDataAdapter1.Update(this.dataSet11);
            this.dataSet11.AcceptChanges();
        }
    }
}

[ era1 @ 28.02.2006. 11:42 ] @
To je to!

Ovaj red je nedostajao:

this.dataSet11.Categories.Rows[index].Delete();

Hvala puno, problem reshen.
Pozdrav!!!