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

Problem sa DataGrid-om

[es] :: .NET :: Problem sa DataGrid-om

[ Pregleda: 1811 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Problem sa DataGrid-om12.03.2004. u 17:42 - pre 244 meseci
Imam dve Windows forme Form1 i Form2. U Form1 imam DataGrid kontrolu koju punim podacima iz jedne tabele Access baze. U Form2 treba da prikazem podatke sa detaljima na osnovu korisnikovog izbora duplim klikom na neku stavku u grid-u. Ovaj problem sam resio (donekle) na ovaj nacin:
Code:

public class Form1
{
{
...
//negde na pocetku koda
string text="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb";
string upit="SELECT ime, prezime, adresa FROM tabela1";
OleDbConnection veza=new OleDbConnection(text);
veza.Open();
OleDbDataAdapter da=new OleDbDataAdapter(upit, veza);
DataTable dt=new DataTable();/// koristim DataTable
da.Fill(dt);
veza.Close();
dataGrid1.DataSource=dt;
}
public void dataGrid1_DoubleClick(object sender, System.EventArgs e)
{
if(dataGrid1.CurrentRowIndex>=0)
{

Form2 f2=new Form2(this);
f2.ShowDialog();
f2.Dispose();
}
}
public string Naziv
{
get
{
return (dataGrid1[dataGrid1.CurrentRowIndex,0]).ToString();
}
}
}

a u Form2

public class Form2
{
{
public Form2(Form1 parent)
{
this.parent=parent;
InitializeComponent();
Puni();
}
public void Puni()
{
string text="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb";
string upit="SELECT * FROM tabela1 WHERE ime='"+ parent.Naziv +"'";
OleDbConnection veza=new OleDbConnection(text);
......
}
}

i ovde jednostavno dobijem trazeni podatak iz baze.

Problem je sledeci kada hocu da isto to uradim samo preko ID vrednost stavke iz tabela1. A takodje pritom i podesavam izgled grida da se ne vidi vrednost ID.
Code:

public class Form1
{
{
...
///negde na pocetku koda
string text="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb";
string upit="SELECT id, ime, prezime, adresa FROM tabela1";
OleDbConnection veza=new OleDbConnection(text);
veza.Open();
OleDbDataAdapter da=new OleDbDataAdapter(upit, veza);
DataSet ds=new DataSet();/// skrecem paznju da sam ovde upotrebio DataSet
da.Fill(ds, "tabela1");
veza.Close();
DataGridTableStyle tstyle=new DataGridTableStyle();
tstyle.MappingName="glavna2";
dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(tstyle)
dataGrid1.DataSource=ds.Tables["glavna2"];
///dalje ide podesavanje sirine kolona(e)
AutoSCol(0, 0); ///gde za prvu kolonu id stavljam vrednost 0 kako se ne bi videla
}
public void AutoSCol(int col, int width)
{
///kod koji to odradjuje
}
public void dataGrid1_DoubleClick(object sender, System.EventArgs e)
{
if(dataGrid1.CurrentRowIndex>=0)
{
Form2 f2=new Form2(this);
f2.ShowDialog();
}
}
public int ID
{
return /// ??? ovde nastaje problem prosledjivanja kliknute kolone prema Form2
/// naglasavam da je vrednost id u tabela1 tipa AutoNumber
}


public class Form2
{
{
public Form2(Form1 parent)
{
this.parent=parent;
InitializeComponent();
Puni();
}
public void Puni()
{
string text="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb";
string upit="SELECT * FROM tabela1 WHERE id='"+ parent.ID +"'";
OleDbConnection veza=new OleDbConnection(text);
......
}
}

Pokusavao sam to na sve nacine kako bi radilo kao u primeru 1 ali nista.
Nadam se da je pitanje dovoljno jasno i da nisam propustio nista bitno od koda. Hvala unapred na pomoci.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 00:04 - pre 244 meseci
Jel dobijaš neku grešku ili jednostavno ne radi?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 02:18 - pre 244 meseci
Kada stavim,
Code:

public string ID
{
get
{
return (dataGrid1[dataGrid1.CurrentRowIndex,0]).ToString();
}
}

jednostavno kompajler nista ne signalizira ali ni ne dobijem nikakav rezultat.

Kada stavim,
Code:

public int ID
{
get
{
return (dataGrid1[dataGrid1.CurrentRowIndex,0]).ToString();
}
}

naravno dobijem gresku Cannot implicitly convert type 'string' to 'int'

a kada stavim,
Code:

public int ID
{
get
{
return (dataGrid1[dataGrid1.CurrentRowIndex,0]);
}
}

dobijem Cannot implicitly convert type 'object' to 'int'

A ovo su samo neki od primera a da ne pricam sta sam sve pokusavao sa Parse(), Convert.ToInt32 idt.... Nista od toga nije dalo rezultate. Ponavljam ID je u bazi tipa AutoNumber, ono u prvom primeru sto je radilo je ipak "ime" tipa Text.
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 02:27 - pre 244 meseci
Ako nije problem, upload-uj deo projekta pa da pogledamo..

Jesi li siguran da to nije zato što je kolona skrivena?

Drugo, pošto imaš redni broj reda koji je kliknut, možeš li da potrebnu vrednost pročitaš iz DataTable-a koji je prikazan u DataGrid-u? Nešto poput:

return ((DataTable)(this.dataGrid1.DataSource)).Rows[dataGrid1.CurrentRowIndex][0];

Umesto [0] na kraju možeš i da ideš sa imenom kolone npr. ["AutoID"} ili kako si već dao ime istoj. Naravno, sve to uz potrebnu konverziju u int (System.Convert.ToInt32) ili string, kako ti već treba.
Commercial-Free !!!
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 11:50 - pre 244 meseci
Fora je u tome sto sam u ovom slucaju koristio DataSet, a ne DataTable kao u primeru 1 koji mi radi. Koliko sam shvatio sa DataTable je stvar mnogo laksa, ali nisam provalio kako da korisniku omogucim tako dobar prikaz (skrivena id vrednost itd.) kao sa DataSet-om sa kojim se to vrlo elegantno radi. Mozda imam potpuno pogresan pristup problemu, sada pokusavam preko objekta tipa HitTestInfo nesto kao dataGrid1.HitTest(), pa onda preko
Code:
BindingManagerBase bman=this.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];
bman.Position=ht.Row;


ali mi i dalje ne uspeva da se snadjem. Videcu da upload-ujem tu klasu odakle treba da izcupam id vrednost kliknutog reda, ali ne mogu da provalim kako to ovde da zakacim uz poruku : )
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 12:25 - pre 244 meseci
Pa nije problem ako si koristio DataSet pošto on sadrži DataTable. Samo kastiraj u DataSet umesto u DataTable i onda daj referencu na potrebnu tabelu.

return ((DataSet)(this.dataGrid1.DataSource)).Tables[0].Rows[dataGrid1.CurrentRowIndex][0];

Naravno i ovde umesto Tables[0] možeš da ideš sa Tables["ime_tabele_u_dataSetu"].

Pozdrav

Commercial-Free !!!
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 15:43 - pre 244 meseci
Code:
public int ID
{
get
{
return int.Parse(((DataSet)(this.dataGrid1.DataSource)).Tables["table1"].Rows[dataGrid1.CurrentRowIndex][0]);
}
}


upravo pokusavam ali kompajler izbacuje gresku:

Argument '1': cannot convert from 'object' to 'string'
The best overloaded method match for 'int.Parse(string)' has some invalid arguments


a kada stavim bez int.Parse() onda izbaci:

Cannot implicitly convert type 'object' to 'int'
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 18:12 - pre 244 meseci
Citat:
Argument '1': cannot convert from 'object' to 'string'
The best overloaded method match for 'int.Parse(string)' has some invalid arguments

a kada stavim bez int.Parse() onda izbaci:
Cannot implicitly convert type 'object' to 'int'


Ne možeš da radiš int.Parse nad object-om, int.Parse radi samo nad stringovima (možda i nad boxovanim stringovima, da ne grešim dušu). Ako si siguran da ti je varijabla int tipa, najobičniji cast "(int)" radi posao, pošto je onda taj object u stvari boxovani integer. Ne znam da li će ti ovo rešiti ceo problem, ali bi trebalo da te oslobodi kompajlerske greške

Code:

int x = 5;
object y = x;
x = (int)y;



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 20:36 - pre 244 meseci
Citat:

int x = 5;
object y = x;
x = (int)y;


Eksplicitna konverzija, to je zaista "smirilo" kompajler ali na zalost jos nisam dosao do konacnog resenja problema. Razmisljam da se ipak opredelim za prosledjivanje vrednosti po string tipu.


 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Problem sa DataGrid-om13.03.2004. u 21:26 - pre 244 meseci
Pa napisao sam ti da ideš sa

return Convert.ToInt32(((DataSet)(this.dataGrid1.DataSource)).Tables["table1"].Rows[dataGrid1.CurrentRowIndex][0]);

a ako treba string onda jednostavno izostaviš ovo Convert.ToInt32, a dodaš jedno .ToString() na kraju.

U čemu je sad problem? :) Odnosno, skoro da je nemoguće da ovo ne radi :)
Commercial-Free !!!
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om14.03.2004. u 12:02 - pre 244 meseci
I jesam degojs upravo sam tako i pokusavao ali kao sto rekoh nije radilo. Jednostavno nisam dobijao ocekivani rezultat a ni sam nisam otkrio zbog cega. Zakljucio sam da je najbolje resenje prosledjivanje po stringu za polje u bazi koje je tipa Text, ali se ne ponavlja:
Code:

public string ID2
{
get
{
return (dataGrid1[dataGrid1.CurrentRowIndex,1]).ToString();
}
}

ovo jednostavno resenje je uradilo pravu stvar (radi). Mozda nije bas najbolji nacin rada ali u mom slucaju olaksavajuca okolnost je ta sto mi je sama baza u projektu ReadOnly pa mi to ide na ruku u ovakvom pristupu. Hvala svima na pomoci.
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Problem sa DataGrid-om14.03.2004. u 20:52 - pre 244 meseci
Citat:
za polje u bazi koje je tipa Text


Eee, pa ako je tipa Text u bazi onda ga prvo i pročitaj sa .ToString. Kad dobiješ string koji sadži broj (npr. "112") onda može Convert.ToInt32.

Zašto je polje koje sadrži brojeve tipa Text a ne Number u bazi? :)


Commercial-Free !!!
 
Odgovor na temu

bokac
Beograd

Član broj: 19866
Poruke: 110
*.dial.b92.net



Profil

icon Re: Problem sa DataGrid-om15.03.2004. u 10:49 - pre 244 meseci
Veruj mi bazu nisam ja pravio nego neko ko se ne razume u to bas najbolje. Nemas pojma koliko sam se namucio zbog rada sa lose dizajniranom bazom. Inace baza je puna brojeva koja su poljima tipa Text (osim prave ID vrednosti koja je jedina broj, naravno AutoNumber). Posto sam naravno kao i svi pokusavao da vrsim pretrazivanje preko polja ID nikako mi nije islo, onda sam pronasao neko drugo polje cija se vrednost ne ponavlja (bar sam ja tako zakljucio) ali je tipa Text pa sam odlucio da celu pricu idem preko tog polja i ok radi. S obzirom da mi nije nikako islo ono prosledjivanje kliknutog reda DataGrid-a preko ID number, onda sam bio prinudjen da radim na ovaj nacin.
 
Odgovor na temu

[es] :: .NET :: Problem sa DataGrid-om

[ Pregleda: 1811 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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