Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

tableAdapterManager.UpdateAll

[es] :: .NET :: .NET Desktop razvoj :: tableAdapterManager.UpdateAll

[ Pregleda: 2062 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

windows user

Član broj: 284005
Poruke: 9
*.static.sbb.rs.



+1 Profil

icon tableAdapterManager.UpdateAll27.06.2011. u 08:47 - pre 155 meseci
Nesto mi ne polazi za rukom da resim problem. Nadam se da ce mi neko ovde pomoci.

Na formi imam jedan DataGridView preko kojeg se radi ažuriranje podataka u bazi i jedano dugme za snimanje izmena:

Code:
 
this.Validate();
this.testSQLBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.testSQLDataSet);


Sve ovo u principu radi kako treba. Ono sto bi mi trebalo je da recimo napravim dugme koje bi bilo disejblovano ukoliko nisu radjene nikakve izmene nad podacima. Tek ukoliko dodje do izmene nekog podatka od momenta kad je poslednji put odradjen update dataset-a trebalo bi da dugme bude enjeblovano. Pri zatvaranju te forme mogao bi još i proveriti status dugmeta pa ukoliko je enjeblovano upozoriti korisnika da postoje podaci koji nisu snimljeni i ponuditi mu mogucnos da snimi ukoiko je zaboravio.


Kako to odraditi? Ima li neko ideju?
 
Odgovor na temu

windows user

Član broj: 284005
Poruke: 9
*.adsl.eunet.rs.



+1 Profil

icon Re: tableAdapterManager.UpdateAll27.06.2011. u 20:54 - pre 155 meseci
Jos jedno dodatno pitanje. Da li je lose ukoliko se na dogadjaj CellEndEdit definise snimanje izmena? Ukoliko ne bi narusio performanse sistema, ovim bi u potunosti mogao izvbaciti ugme "snimi" iz aplikacije.
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.199.*

Sajt: www.dcaric.com


+26 Profil

icon Re: tableAdapterManager.UpdateAll29.06.2011. u 11:07 - pre 155 meseci
Dugmići na formi bi uvek trebali da budu enabled, a ako neku akciju hoćeš da zabraniš, onda korisniku uvek prikaži i poruku/razlog: Ta akcija nije dozvoljena zbog toga i toga... Ukoliko npr. radiš program za štampanje faktura i disejbluješ/sakriješ dugme za štampu sve dok faktura nije sačuvana, velika je verovatnoća da će te klijent zvati i pitati zašto tog dugmeta nema na formi, a ranije je bilo :)

Umesto DataSet-ova i TableAdapter-a, mogao bi da koristiš svoje klase i klasični ADO.NET ili neki ORM tipa LINQ to SQL ili Entity Framework. Ima malo više za kucanje, ali ti daje mnogo veću fleksibilnost nego wizard-i.

Napraviš prvo jednu baznu klasu, koja ima property IsDirty i koji određuje da li je neki property promenjen ili nije.
Code:
public class BaseClass
{
    public bool IsDirty { get; set; }

    public void SetClean()
    {
        IsDirty = false;
    }
}

Prilikom dohvatanja podataka iz baze, kao i nakon uspešnog snimanja promena u bazu, trebaš da pozoveš metodu SetClean().

Sve ostale klase treba da naslede baznu klasu, npr:
Code:
public class Foo : BaseClass, INotifyPropertyChanged
{
    private int _id;
    public int Id
    {
        get { return _id; }
        set
        {
            if(_id != value)
            {
                _id = value;
                NotifyPropertyChanged("Id");
            }
        }
    }

    private string _boo;
    public string Boo
    {
        get { return _boo; }
        set
        {
            if(_boo != value)
            {
                _boo = value;
                NotifyPropertyChanged("Boo");
            }
        }
    }

    private void NotifyPropertyChanged(string propertyName)
    {
        IsDirty = true;

        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}



Ovako posle povežeš kolekciju svojih objekata i DataGridView:
Code:
List<Foo> list = ...  dohvatiš podatke iz baze
DataGridView1.DataSource = list;


Pošto lista može biti velika, a korisnik obično izmeni samo nekoliko redova preko DataGridView-a, nema potrebe da za svaki list item radiš UPDATE u bazi.
Umesto toga, možeš da protrčiš kroz kolekciju objekata i vidiš koji objekti imaju IsDirty == false i da samo za njih uradiš UPDATE:
Code:
foreach(var item in list)
{
    if(item.IsDirty)
    {
        // save changes        
    }
}

 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.199.*

Sajt: www.dcaric.com


+26 Profil

icon Re: tableAdapterManager.UpdateAll29.06.2011. u 11:13 - pre 155 meseci
Citat:
windows user: Jos jedno dodatno pitanje. Da li je lose ukoliko se na dogadjaj CellEndEdit definise snimanje izmena? Ukoliko ne bi narusio performanse sistema, ovim bi u potunosti mogao izvbaciti ugme "snimi" iz aplikacije.

Dohvatanje ili snimanje promena u bazi je generalno uvek skupa operacija, tako da bi što manje trebao da ideš do baze i nazad.
Jedno Save dugme bi odradilo posao mnogo bolje nego snimanje na CellEndEdit.
Zamisli da u DataGridView imaš 10 kolona, korisnik popuni prvih 7 i odluči da ipak neće da sačuva izmene već samo da zatvori formu.

1. 7 puta si bespotrebno gađao bazu
2. Na koji način ćeš uraditi revert izmena?
 
Odgovor na temu

windows user

Član broj: 284005
Poruke: 9
*.static.sbb.rs.



+1 Profil

icon Re: tableAdapterManager.UpdateAll01.07.2011. u 07:30 - pre 155 meseci
Dejane, svaka čast na odgovoru. Iskreno nisam iz prve sve pohvatao tako da idem sad lagano korak po korak da isprobavam. Siguran sam da će na osnovu ovog tvog odgovora nešto da se reši.



Što se tiče snimanja izmena uvek sam se vodio logikom da korisniči češće zaborave da snime izmene nego što im se desi da svesno ne žele da ih sačuvaju.
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.199.*

Sajt: www.dcaric.com


+26 Profil

icon Re: tableAdapterManager.UpdateAll01.07.2011. u 09:29 - pre 155 meseci
Citat:
windows user: Što se tiče snimanja izmena uvek sam se vodio logikom da korisniči češće zaborave da snime izmene nego što im se desi da svesno ne žele da ih sačuvaju.

Mislim da se jednako često dešava da korisinici zaborave da sačuvaju izmene i to da svesno žele da ih odbace.
Zato uvek u FormClosing event-u ispitaj da li je korisnik napravio neke izmene, a nije ih sačuvao. Tu možeš da mu izbaciš neki Yes/No message box...
 
Odgovor na temu

dejanet
Beograd

Član broj: 19240
Poruke: 1181



+835 Profil

icon Re: tableAdapterManager.UpdateAll02.07.2011. u 09:47 - pre 155 meseci
Ako se radi sa winform-ovima i dataset-ovima, ovo je po meni dobar pristup za formclosing:

Code:
        private void tvojForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (tvoj_DataSet.HasChanges() == true)
            {
                //akcija ako ima nesnimljenih podataka

            }
        }
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: tableAdapterManager.UpdateAll

[ Pregleda: 2062 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.