PDA

Pogčedajte punu verziju : ListBoxControl problem C#


nedimtx
03. 03. 2011., 23:08
Zdravo,

koristim ListBoxControl od DevExpress.

Naime:

U dokumentaciji sam nasao:

SelectedItem Gets or sets the currently selected item. (Inherited from BaseListBoxControl)

ukucam


lbKonekcije.SelectedItem = txtServerName.Text.ToString();


i ne promijeni selektovani item? Zelim da kad kucam u txt kontroli da se mijenja item?

Zero-Cool
04. 03. 2011., 11:13
U principu skroz je ispravno, samo sto to moras da stavis u TextChange Event txtServerName textboxa.

jablan
04. 03. 2011., 11:33
Hmm, da nisi možda hteo:


lbKonekcije.SelectedValue = txtServerName.Text.ToString();


Ne možeš kontroli da dodeliš string.

Zero-Cool
04. 03. 2011., 11:39
Hmm, da nisi možda hteo:


lbKonekcije.SelectedValue = txtServerName.Text.ToString();


Ne možeš kontroli da dodeliš string.

Moze opusteno da uradi onako kako je napisao, da je DropDown onda bi morao na ovaj tvoj nacin....

nedimtx
05. 03. 2011., 01:07
Uspio sam na kraju tako sto sam u EditValueChaning event dodao jedan array koji napunim podacima pa onda uradim clear item-a u onoj listi i stavim da je vrijednost item-a kojeg editujem = vrijednosti text boxa a ne iz niza... I to je ok.

Interesuje me oko event-a, mogu li recimo kad se izvrsava kod jednog eventa onemoguciti drugi privremeno, pa poslije ponovo omoguciti? pravi mi problem:

lbKonekcije_MouseCaptureChanged

Malo mi je tesko objasniti...

Zapravo bolje je da kôd stavim:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace videotekasoft
{
public partial class frmConnection : DevExpress.XtraEditors.XtraForm
{
public frmConnection()
{
InitializeComponent();
}

private void btnNovakonekcija_Click(object sender, EventArgs e)
{
txtServerName.Text = "";
lbKonekcije.Items.Add("").ToString();
lbKonekcije.SelectedIndex = lbKonekcije.ItemCount;
txtServerName.Focus();
}

private void lbKonekcije_MouseCaptureChanged(object sender, EventArgs e)
{


txtServerName.Text = lbKonekcije.SelectedItem.ToString();




}



private void ckWin_CheckedChanged(object sender, EventArgs e)
{
// ako je oznaceno ne zeli upis username & pass
if (ckWin.Checked == true)
{
lblUserDB.Visible = false;
lblPassDB.Visible = false;
txtUserDB.Visible = false;
txtPassDB.Visible = false;

}
else // ako nije onda konekcija ima user & pass
{
lblUserDB.Visible = true;
lblPassDB.Visible = true;
txtUserDB.Visible = true;
txtPassDB.Visible = true;
}
}

private void txtServerName_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
// podaci

int index = Convert.ToInt32(lbKonekcije.SelectedIndex);
int count = Convert.ToInt32(lbKonekcije.ItemCount);

// kreiraj niz i strpaj podatke u niz

string[] clanovi = new string[count];


for (int i = 0; i < count; i++)
{
clanovi[i] = lbKonekcije.Items[i].ToString();

}


// ocisti listu
lbKonekcije.Items.Clear();

// zavrti petlju gdje ce novi index biti vrijednosti koja se unosi u ovom textfieldu
// i popuni listu

for (int i = 0; i < count; i++)
{
if (i == index)
lbKonekcije.Items.Add(txtServerName.Text.ToString( ));
else if (i != index)
lbKonekcije.Items.Add(clanovi[i].ToString());


lbKonekcije.SelectedIndex = index;

}



}





}
}


kad dodam par item-a u listu i onda klikcem na njih, ne funkcionise kako treba...

nedimtx
05. 03. 2011., 01:26
Zanimljivo...

Zamijenio sam ovo:


private void lbKonekcije_MouseCaptureChanged(object sender, EventArgs e)
{

int index = Convert.ToInt32(lbKonekcije.SelectedIndex);
int count = Convert.ToInt32(lbKonekcije.ItemCount);

// kreiraj niz i strpaj podatke u niz

string[] clanovi = new string[count];


for (int i = 0; i < count; i++)
{
clanovi[i] = lbKonekcije.Items[i].ToString();

}


lbKonekcije.Items.Clear();
txtServerName.Text = clanovi[index];



for (int i = 0; i < count; i++)
{

lbKonekcije.Items.Add(clanovi[i].ToString());
lbKonekcije.SelectedIndex = index;

}



}


I sada kad klikcem po items ne remeti ostale... Jel mi moze neko objasniti zasto je ovaj kod ok a iznad nije?

Zero-Cool
08. 03. 2011., 09:43
Uvek mozes u kodu da iskljucis neki dogadjaj (Event):

this.lbKonekcije.MouseCaptureChanged -=
new System.EventHandler(lbKonekcije_MouseCaptureChange d);

i posle koda koji izvrsavas opet ga ukljucis:

this.lbKonekcije.MouseCaptureChanged +=
new System.EventHandler(lbKonekcije_MouseCaptureChange d);

Sto se tice pitanja sto gornji kod nije dobar a donji je ok, vrlo jednostavno, napravio si neku vrstu beskonacnog loop-a, jer kad se okine event nad textboxom on promeni vrednost u listboxu, a sa promenom te vrednosti se menja vrednost u textboxu opet :D

nedimtx
08. 03. 2011., 18:39
Da, sad mi je jasno, kad sam pogledao kôd ponovo nakon par dana. :D

Ali, ono sto mi nije jasno jeste sljedece:

- Imam formu gdje je grid (prikaz podataka) i jos jednu formu sam dodao koja se otvara za unos novih podataka. Medjutim, kako bih sad u ovoj drugoj formi kad se klikne na button mogao pristupiti DataSetu iz prve forme, kako bih osvjezio podatke?

Zero-Cool
09. 03. 2011., 08:34
Nisam siguran da sam dobro razumeo pitanje, ja cu da ti odgovorim,ako to nije to, moraces malo preciznije ;)

Elem, imas formu gde se nalazi grid, grid si bind-ovao na neki datasource koji vuce podatke npr iz baze....Onda na toj formi imas dugme koje kada kliknes otvaras drugu formu sa poljima za unos podataka. Na toj istoj formi za unos moras imati samo jos dume sacuvaj i otkazi. Otkazi dugme radi jednu fenomenalnu operaciju (zatvara prozor), a sacuvaj dugme treba da gurne podatke u bazu i da preko delegata odradi povlacenje podataka iz baze u datasource i ponovno bindovanje za gridview (Sa ovim si osvezio podatke u gridu i videces novi unos).

Ne treba ti dodatno dugme za osvezavanje podatka, sve mozes da resis sa dugmetom za cuvanje podataka. Cak u toj formi za unos ne moras da radis ni cuvanje podataka nego da napravis entitet i da ga gurnes preko delegata nazad na formu sa gridom i tamo odradis sve, al ovo je vec dosta zamrsenije ;))

Nadam se da je ovo ono sto si trazio