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

Update ListViewa u prvoj formi, dok je druga aktivna?

[es] :: .NET :: Update ListViewa u prvoj formi, dok je druga aktivna?

[ Pregleda: 3813 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Update ListViewa u prvoj formi, dok je druga aktivna?11.04.2006. u 00:13 - pre 218 meseci
Ovako:

Na jednoj formi mi se nalazi kontrola ListView koji je popunjena podacima iz baze.
Recimo, kad hocu da obrišem neki od članova ListViewa - izaberem član i pritisnem dugme "Obriši" - podatak se zatim briše iz baze – pozivam metod (PopuniListView) koji ponovo popunjava ListView (ovoga puta bez izbrisanog člana).
Ovo je ok.

E sad. Hoću da dodam novi član. Pritisnem dugme "Dodaj" – otvara se nova forma sa dva TextBoxa i dugmadima – popunjavam oba TextBoxa – pritiskam dugme Zapamti – podaci se uspešno dodaju u bazu – pravim instancu klase prve forme i nad njom pozivam metod PopuniListView – zatvaram formu, ali na prvoj formi, u ListView se prikazuju samo stari članovi (nema novo-dodatog).
Gde grešim?
 
Odgovor na temu

radoica

Član broj: 12972
Poruke: 158
*.yubc.net.



+3 Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?11.04.2006. u 01:21 - pre 218 meseci
Probaj da drugoj formi prosledis referencu na prvu formu u konstruktoru druge forme. Druga forma bi trebalo da ima jedan atribut tipa prve forme "Form1 frm1" a konstruktor druge forme bi trebalo da izgleda ovako (samo prepravi default konstruktor):

// konstruktor druge forme

public Form2(Form1 frm1)
{
InitializeComponent();
this.frm1 = frm1;
}

Kada zavrsis sa ubacivanjem podataka u bazu umesto da pravis novi objekat tipa Form1 iskoristi frm1.PopuniListView();

U prvoj formi kreiranje druge forme izgleda ovako:

Form2 frm2 = new Form2(this);
frm2.Show();

 
Odgovor na temu

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?12.04.2006. u 15:28 - pre 218 meseci
Nisam uspeo na taja način.

Evo kako otprilike izgleda moj kod (sa tvojim izmenama):

Code:

public Izmene() // Prva forma
        {    
            InitializeComponent();
            PopuniListView();
        }
        private void obrisiButton_Click(object sender, System.EventArgs e)
        {
            //brise se odredjeni red iz baze
            PopuniListView(); // uspesno se popunjava ListView bez obrisanog clana
        }
        private void dodajButton_Click(object sender, System.EventArgs e)
        {
            Dodavanje dodajObj = new Dodavanje(this);
            dodajObj.ShowDialog();
        }
        public void PopuniListView()
        {
            //popunjava ListView
        }


Code:

public Dodavanje(Izmene izmObj) // Druga forma
        {
            InitializeComponent();
            this.izmObj = izmObj; // Ovo ne funkcionise dok ne deklarisem objekat van konstruktora
        }
        Izmene izmObj; // Ovako

        private void zapamtiButton_Click(object sender, System.EventArgs e)
        {
            // Dodaje se novi red u bazu
            izmObj.PopuniListView(); // a i treba mi i zbog poziva ovog metoda.
        }

 
Odgovor na temu

radoica

Član broj: 12972
Poruke: 158
*.yubc.net.



+3 Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?12.04.2006. u 21:59 - pre 218 meseci
Rekao sam ti da ce ti trebati jedan atribut tipa prve forme (procitaj drugu recenicu u mom predhodnom postu).
OK, ti si to dodao (Izmene izmObj), i vidim da obe klase izgledaju onako kako sam ti predlozio, ali mi nije jedna stvar jasna, i sa ovim izmenama ti program ne radi?
 
Odgovor na temu

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?13.04.2006. u 01:12 - pre 218 meseci
Program se prevodi bez problema, ali ostaje isti problem.

Mene interesuje jedna stvar, samo osnovna sintaksa. Evo još prostiji primer:

Imam dve forme, sa po jednim textBoxom i dugmetom, ovako:

Code:

public Form1()
        {
            InitializeComponent();
        }
private void prikaziButton_Click(object sender, System.EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.TextDva = this.textBox1.Text;
            frm2.ShowDialog(); // Prikazuje se druga forma sa tekstom koji je upisan u prvoj
        }
private TextBox textBox1;
private Button prikaziButton;

Code:

public Form2()
        {
            InitializeComponent();
        }
public string TextDva
        {
            set
            {
                this.textBox2.Text = value;
            }
        }
private void izmeniButton_Click(object sender, System.EventArgs e)
        {
            // Šta treba napisati ovde da uradim suprotno, odnosno, da tekst sa druge forme prepišem na prvu u trenutku pritiska na dugme?
        }
private TextBox textBox2;
private Button izmeniButton;
 
Odgovor na temu

radoica

Član broj: 12972
Poruke: 158
*.yubc.net.



+3 Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?13.04.2006. u 17:09 - pre 218 meseci
Ono nasta treba da obratis paznju je pod komentarima

Code:

using System;
using System.Windows.Forms;
using System.Drawing;

namespace Program1
{
    internal class Form1 : Form
    {
        internal TextBox f1_tb1; // 'internal' ili 'public' da bi mogao da mu pristupis
        private Button f1_b1;
        
        private Form1()
        {
            // f1_tb1
            f1_tb1 = new TextBox();
            f1_tb1.Text = "Form1_TextBox1";
            f1_tb1.Location = new Point(10, 10);
            Controls.Add(f1_tb1);
            // f1_b1
            f1_b1 = new Button();
            f1_b1.Text = "Form1_Button1";
            f1_b1.Size = new Size(f1_tb1.Size.Width, f1_b1.Size.Height);
            f1_b1.Location = new Point(10, 40);
            f1_b1.Click += new EventHandler(f1_b1_Click);
            Controls.Add(f1_b1);
            // Form1
            Text = "Form1";
        }

        private void f1_b1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.f2_tb1.Text = f1_tb1.Text; // preko 'f2' pristupis TextBox-u na drugoj formi
            f2.Show();
        }

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

    internal class Form2 : Form
    {
        internal TextBox f2_tb1; // 'internal' ili 'public' da bi mogao da mu pristupis
        private Button f2_b1;
        private Form1 f1; // referenca na 'Form1'

        internal Form2(Form1 f1) // konstruktor 'Form2' koji prima argument tipa 'Form1'
        {
            // f2_tb1
            f2_tb1 = new TextBox();
            f2_tb1.Location = new Point(10, 10);
            Controls.Add(f2_tb1);
            // f2_b1
            f2_b1 = new Button();
            f2_b1.Text = "Form2_Button1";
            f2_b1.Size = new Size(f2_tb1.Size.Width, f2_b1.Size.Height);
            f2_b1.Location = new Point(10, 40);
            f2_b1.Click += new EventHandler(f2_b1_Click);
            Controls.Add(f2_b1);
            // Form1
            this.f1 = f1; // sada tvoj atribut 'f1' "pokazuje" na prvu formu
            // Form2
            Text = "Form2";
        }

        private void f2_b1_Click(object sender, EventArgs e)
        {
            f1.f1_tb1.Text = f2_tb1.Text; // preko 'f1' pristupis TextBox-u na prvoj formi
            Close();
        }
    }
}
 
Odgovor na temu

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?13.04.2006. u 20:08 - pre 218 meseci
Ok, ovo radi.
Probaću da ovo primenim kod mene u programu, mada već sam probao i nije radilo... ma nešto ću smisliti :) ...

Hvala na pomoći...
 
Odgovor na temu

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?15.04.2006. u 19:40 - pre 218 meseci
Ljudi pomagajte, sad sam se zaglavio najgore! Problem iz mog prvog posta sam samo delimično rešio, ali sad sam u još gorem rebusu!

Možda će zvučati čudno, ali metod koji pozivam pri dodavanju novog člana na ListView prve forme, ne radi uvek istu stvar (treba da popuni DataSet tabelom koja je osvežena pri brisanju reda u drugoj formi)

Evo da podsetim kako izgleda kod:

Code:

public Izmene() // Prva forma
        {    
            InitializeComponent();
            PopuniListView();
        }
        private void obrisiButton_Click(object sender, System.EventArgs e)
        {
            //brise se odredjeni red iz baze
            PopuniListView(); // uspesno se popunjava ListView bez obrisanog clana
        }
        private void dodajButton_Click(object sender, System.EventArgs e)
        {
            Dodavanje dodajObj = new Dodavanje(this);
            dodajObj.ShowDialog();
        }
        public void PopuniListView()
        {
            //popunjava ListView
        }
........................
public Dodavanje(Izmene izmObj) // Druga forma
        {
            InitializeComponent();
            this.izmObj = izmObj;
        }
        private void zapamtiButton_Click(object sender, System.EventArgs e)
        {
.........
            // Dodaje se novi red u bazu
    myAdapter.Update (myDataSet, Tabela); //Ovo nisam zaboravio 
            izmObj.PopuniListView(); // Poziva se uvek, ali ne funkcioniš uvek!
        }
Izmene izmObj;


Ono što me najviše zbunjuje, je što ponekad metod izvrši operaciju iz prve, a najčešće posle unosa svakog drugog člana (u tom trenutku doda i predhodni na listView). Dešava se da uspešno dodajem članove i da posle nekoliko unosa metod kao da preskoči!
Da li je neko imao sličan problem?!
 
Odgovor na temu

Wlada

Član broj: 14344
Poruke: 171
212.200.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?15.04.2006. u 21:15 - pre 218 meseci
Evo ti kompletan source koji kod mene radi bez problema. Rađen je u VS 2005, ali bi trebalo uz manje izmene da radi i u 2003. Meni i dalje nije jasno kako je moglo da ne radi.
Prikačeni fajlovi
 
Odgovor na temu

miki_ja
Bgd

Član broj: 69771
Poruke: 97
217.24.27.*



Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?20.04.2006. u 01:52 - pre 218 meseci
@Wlada

Tvoj primer je ok. Kada prepravim svoj kod po ugledu na tvoj, program radi. Mada, idalje to nije ono što želim.
Evo i moj source, pa neka me neko ispravi. Rađen je u VS.NET 2003.

Upišite nekoliko imena na TextBoxove u drugoj formi i biće vam jasno u čemu je problem.
Prikačeni fajlovi
 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Update ListViewa u prvoj formi, dok je druga aktivna?20.04.2006. u 10:09 - pre 218 meseci
Zameni poslednja dva reda u button1_Click na formi 2:

Code:

        private void button1_Click(object sender, System.EventArgs e)
        {
            OleDbConnection thisConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb");
            thisConnection.Open();

            OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT * FROM Osoba", thisConnection);
            OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
            DataSet thisDataSet = new DataSet();
            thisAdapter.Fill(thisDataSet, "Osoba");
            DataRow thisRow = thisDataSet.Tables["Osoba"].NewRow();

            int brojRedova = thisDataSet.Tables["Osoba"].Rows.Count;
            thisRow["ID"] = brojRedova + 1;
            thisRow["Ime"] = txtIme.Text;
            thisRow["Prezime"] = txtPrezime.Text;
            thisDataSet.Tables["Osoba"].Rows.Add(thisRow);
            thisAdapter.Update(thisDataSet, "Osoba");
            thisConnection.Close();
            frm1.PopuniListview();
        }


Inače, ovo ti je loš način da odradiš posao. U formi dva ne treba da čitaš podatke iz baze, jer sa njima ništa ne radiš - samo dodaješ novi. A, takođe, bolje bi bilo da PopuniListview() metodu proslediš šta da doda na ListView, bez čitanja podataka iz baze... Ili, još bolje, da DataSet deklarišeš kao public na nivou forme 1 (ili kao private, pa mu prilaziš preko property-ja) i da ga vežeš za ListView, pa da samo dodaješ podatke u njega i radiš update.
Oliver 'FAQ' Klaćik
 
Odgovor na temu

[es] :: .NET :: Update ListViewa u prvoj formi, dok je druga aktivna?

[ Pregleda: 3813 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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