» »

C#, Dodajanje podatkov v Arraylist z Gumbom

C#, Dodajanje podatkov v Arraylist z Gumbom

Beezgetz ::

Živjo!

Imam en velik problem. Želim si, da bi s pritiskom na Dodaj gumb vnesel iz dveh textBox-ov njuno vsebino (string in double) v dva ArrayList-a. Za to rabim neomejen array, saj naj bi bilo število vnosov (klikov na gumb) veliko po želji uporabnika. Zanima me, kako izvesti takšen for loop, oziroma kaj je potrebno narediti? :\

Nadalje bi rad, da se vsi ti vnosi izpišejo v listBox (string in double v isto vrstico), ter da ko se izbere vrstica v listBox-u in stisne na Izbriši gumb, da se izbrišejo podatki iz ArrayList-ov in listBox-a. ;)
Od tu naprej bi že znal izbrano vrstico iz listBox-a s pritiskom na Spremeni gumb (Edit) vstavit v textBox-e in Spremenit vsebino. 8-)

To najbrž ni velik problem za stare mačke in je bržkone stalna praksa (vnos imen in podatkov), samo meni predstavlja precej trd oreh. Prosil bi za primer. :D

Začetniški pozdrav!!!!

teac ::

Narediš si array npr:
ArrayList arrayString = new ArrayList()
in potem ob kliku na gumb
arrayString.Add(textBox.Text)
Isto narediš za double.
Sam sicer nebi delal dva arraya, ampak bi ta dva podatka (string in double) dal v strukturo in potem strukturo dodal v array.
Npr:

struct MyData
{
string myString;
double myDouble;
}

//narediš array
List<MyData> seznam = new List<MyData>();

//ob kliku na gumb
Mydata str = new MyData;
str.myString = textBox1.Text;
str.myDouble = double.Parse(textBox2.Text);
seznam.Add(str);


Za dodajanje teh podatkov v ListView, pa greš skozi vse elemente v seznamu (foreach) in jih dodajaš v ListView. Za brisanje pa boš malo pogoglal, samo en namig...vsakič ko dodaš nov ListViewItem v ListView ima ta svoj index in tako lahko določiš tudi index v arrayu.

Edit: typo

Zgodovina sprememb…

  • spremenilo: teac ()

darkolord ::

Namesto List je za uporabo v listBoxu (in ostalih databound kontrolah) bolj priporočljivo uporabiti BindingList, saj ti tako ni potrebno loopat skozi List in na roko osveževat listboxa...

Takole približno bi bilo na kratko... Ko dodaš en item v BindingList, se ti ListBox osveži (in obratno)

private BindingList<MyData> _seznam = new BindingList<MyData>();
private BindingSource _seznamDS = new BindingSource();

//....

_seznamDS.DataSource = _seznam;
listBox1.DataSource = _seznamDS;

Zgodovina sprememb…

  • spremenilo: darkolord ()

Beezgetz ::

Hej teac in darkolord.
Tenk juri veliku mačku za hiter odgovor!!!

Prvič slišim za strukturo 8-O , pa se bom malo s tem poigral,... A to dela tako kot arraylist, sam da maš lahko različne tipe prdatkov? Hočem rečt, večdimenzionalni array-i so mi še zmeraj španska vas, ta struktura pa izgleda simpl.

Glede databinding sem mislil, da moram to narest (iz neke lekcije, ki jo mam) Bazo podatkov. (Plus, kar se mi zdi velik minus, je to, da hoče imet za te .mdf in .xsd fajle povezavo z internetom..;( ), torej bom probal še tvoj namig darkolord!

Ali torej lahko naredim strukturo, jo dam nekako v binding list, in jo s kliki na gumb nafilam, (torej se mi bo listBox sam osveževal)? No, to bom probal narest :) . Kodo tako ali tako probavam zmanjšat. Pa še to darkolord, ali moram za ta način data binding/source bit priklopljen na net, ali on to shrani - kje?

Lep Pozdrav!!!

darkolord ::

Priklopljen na net? :) :)

To je v bistvu navadna spremenljivka.

Beezgetz ::

Živjo darkolord!

huh, sam nisem toliko na kompu koliko bi rad bil, pa sem šele zdaj prebral,..
Jah, mam neke lekcije od Boba Taborja, kjer se ustvati SQL Database, in za to moram bit priklopljen na net, (drugače mi izpiše neko opozorilo da ne more nadaljevat), potem naredim to bazo podatkov (.mdf), potem grem na Data, Add New Data Source, v čarovniku imam na izbiro samo ta .mdf file, in naredi še .xsd file. No, in šele zdaj smo lahko listBoxe in textBoxe databind-al. Tako, da sem mislil, da se lahko samo tako dataBind-a,...
Bom pa danes probal narest kode za to s čemer sta mi predlagala.

Tenk juri veliku mačku!!!!!!!!!!!!

Lep Pozdrav!

p.s. najbrž se bom še oglasil,

Beezgetz ::

k, sem neki spacal.
Če v Visual C# najprej v dizajnu s tulboxom na formo vnesem dva textBox-a, dva button-a, dva label-a in en listBox, ter vnesem spodnjo kodo, se zgodi da
*-ime in težo iz textBox1 in 2, izpiše v listBox1, po kliku ba button1
*-izbrano vrsto v listbox1, izbriše iz listBox1, po kliku button2

@ teac
Heh, dela... sam zdaj bi še nekaj drugega rad zvedel. Kako izbrano vrstico editirat, recimo sem vnesel napačen podatek, in zdaj bi ga popravil? Sem mislil da mi bo ratal, sam se vrtim v krogu,... rabim dva gumba, bi pa rad z enim. Še kakšen predlog?

@ darkolord. z bindingSource mi nekak ne rata, ...
Prosil bi te, če mi malo več poveš o tem, je recimo boljš, krajši kot ta ki je spodaj napisan ?

Tenk juri veliku mačku

pa še ta udarc! ko sem hotel odposlat to pismo, mi je zabrisal, da ne more odposlat, ker oporabljam znak za več in za manj, kar sta nedovoljeni HTML oznaki. Zaradi tega , bom v spodnji kodi spremenil šesto(List Bremena seznam = new List Bremena();) vrstico in namesto znakov, napisal "manj" in "več"


public struct Bremena
{
public string ime;
public double teža;
}
List"manj"Bremena"več" seznam = new List"manj"Bremena"več"();
//________________________________
private void button1_Click(object sender, EventArgs e)
{
Bremena vnos = new Bremena();
vnos.ime = textBox1.Text;
vnos.teža = double.Parse(textBox2.Text);
seznam.Add(vnos);

textBox1.Text = "";
textBox2.Text = "";
label2.Text = "";

st();
}
//______________________________
private void button2_Click(object sender, EventArgs e)
{
int p = listBox1.SelectedIndex;
label2.Text = "Zbrisal sem : " + seznam[p].ime.ToString() + ", " + seznam[p].teža.ToString() + " kg" + ", iz pozicije : " + p.ToString();
seznam.RemoveAt(p);// brišem vnos iz pozicije p
// po vrstici label2.Text =...
st();
}

private void st()
{
listBox1.Items.Clear(); //moram zbrisat, drugač se vnosi samo nabirajo v listBoxu
int t = seznam.Count; // t = preštejem vse vnose v seznamu
for (int n = 0; n < t; n++)
{ // Izpis imena in teže vseh vnosov v listBox
listBox1.Items.Add(seznam[n].ime + ", " + seznam[n].teža + " kg");
}
// Izpis števila vseh vnosov
label1.Text = "Število vseh vnosov v seznamu : " + t.ToString();
}

darkolord ::

Takole bi izgledalo z bindinglist:

        public class Bremena
        {
            public string ime;
            public double teža;

            public Bremena(string sIme, double dTeza)
            {
                ime = sIme;
                teža = dTeza;
            }

            public override string ToString()
            {
                return ime + ", " + teža + " kg";
            }
        }

        BindingList<Bremena> seznam = new BindingList<Bremena>();
        BindingSource BSseznam = new BindingSource();

        private void button1_Click(object sender, EventArgs e)
        {
            Bremena vnos = new Bremena(textBox1.Text, double.Parse(textBox2.Text));
            seznam.Add(vnos);

            textBox1.Text = "";
            textBox2.Text = "";
            label2.Text = "";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            BSseznam.DataSource = seznam1;
            listBox1.DataSource = BSseznam;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            seznam1.RemoveAt(listBox1.SelectedIndex);
        }


PS. kodo vtakni med [ st.koda ] in [ /st.koda ] taga (brez presledkov)

Beezgetz ::

Hej fanta!

Hvala,
mam pa novo vprašanje, proglejta novo temo "C#, strukture v Class-ih, pa še nekaj,..."


Vredno ogleda ...

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

[ASP.NET] Prenos podatkov iz ene spletne strani v drugo

Oddelek: Programiranje
14875 (734) Cvenemir
»

[C++] Prehod na Windows Forms

Oddelek: Programiranje
5886 (850) jizzer
»

[C#] pomoc pri vpisu elementov v listBox

Oddelek: Programiranje
101196 (1111) keworkian
»

Koda kalkulatorja v MS visual C# 2008?

Oddelek: Programiranje
212858 (2195) smukC
»

[ ASP.NET ] Vprašanje glede podajanja parametrov

Oddelek: Programiranje
151495 (1226) salesky

Več podobnih tem