Skocz do zawartości
Nargil

C# Dataset + Datagridview + Relacje

Rekomendowane odpowiedzi

Mam sobie DataSet ds,w ktorym mam pare tabel i porobione relacje

Mam tez DataGridView dgv1 taki ze:

dgv1.datasource = ds;

dgv1.datamember = "jedna_z_tabel";

 

zalozmy ze te tabele wygladaja nastepujaco:

 

postac

----------

id:autoincr

sex:int

name:text

1 1 "gucio"

2 1 "romek"

3 2 "maja"

4 2 "ania"

 

sex

---------

id:autoincr

sex:text

1 male

2 female

 

to teraz jak zrobic zeby w kontrolce dvg1 widzial

1 male "gucio"

2 male "romek"

3 female "maja"

4 female "ania"

 

a nie

 

1 1 "gucio"

2 1 "romek"

3 2 "maja"

4 2 "ania"

 

 

?

 

wkleje rzeczywisty kod, moze ktos znajdzie blad, albo podpowie mi jak zrobic

 

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\baza.mdb";			string strsql;			OleDbConnection dbc = new OleDbConnection(strConn);						//Artykuly			strsql = "SELECT * from artykuly ORDER BY nazwa";			OleDbDataAdapter daArty = new OleDbDataAdapter(strsql, strConn);			daArty.Fill(db,"artykuly");			//Jednostki miary			strsql = "SELECT * from jednostki_miary ORDER BY jm";			OleDbDataAdapter daJM = new OleDbDataAdapter(strsql, strConn);			daJM.Fill(db, "jednostki_miary");						//Producenci			strsql = "SELECT * from producenci ORDER BY producent";			OleDbDataAdapter daProd = new OleDbDataAdapter(strsql, strConn);			daProd.Fill(db, "producenci");			//Kategorie			strsql = "SELECT * from kategorie ORDER BY kategoria";			OleDbDataAdapter daKat = new OleDbDataAdapter(strsql, strConn);			daKat.Fill(db, "kategorie");			//relacje			db.Relations.Add("PtoA",db.Tables["producenci"].Columns["id"],				db.Tables["artykuly"].Columns["Producent"],true);			db.Relations.Add("KtoA",db.Tables["kategorie"].Columns["id"],				db.Tables["artykuly"].Columns["Kategoria"],true);			db.Relations.Add("JMtoA",db.Tables["jednostki_miary"].Columns["id"],				db.Tables["artykuly"].Columns["jm"],true);						this.dataGridView1.DataSource = db;			this.dataGridView1.DataMember = "artykuly";

chcialbym zeby zgodnie z ustawionymi relacjami wyswietlalo nie:

Nazwa Stan jm producent kategoria

czopek 10 3 1 1

 

tylko powiedzmy

Nazwa Stan jm producent kategoria

czopek 10 szt xxx leki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Post o charakterze informacyjnym, dla potomnych.

Nigdzie nie uzyskalem odpowiedzi, wiec zrobilem to troche inaczej.

1. usunalem

this.dataGridView1.DataSource = db;this.dataGridView1.DataMember = "artykuly";
2. i zrobilem tak

DataRow[] drs;			DataRow tmp;			DataGridViewRow dr;			DataGridViewTextBoxColumn dco;			DataGridViewTextBoxCell dce;			for (int i = 0; i < db.Tables["artykuly"].Columns.Count; i++)			{				dco = new DataGridViewTextBoxColumn();				dco.Name = db.Tables["artykuly"].Columns[i].Caption;				this.dataGridView1.Columns.Add(dco);			}			for (int i = 0; i < db.Tables["artykuly"].Rows.Count; i++)			{				this.dataGridView1.Rows.Add();				dr = this.dataGridView1.Rows[i];				for (int j = 0; j < db.Tables["artykuly"].Columns.Count; j++)				{					dce = new DataGridViewTextBoxCell();					if (db.Tables["artykuly"].Columns[j].Caption == "Kategoria")					{						drs = db.Tables["kategorie"].Select("Id=" + db.Tables["artykuly"].Rows[i][j]);						tmp = (DataRow)drs.GetValue(0);						dce.Value = tmp["kategoria"];					}					else if (db.Tables["artykuly"].Columns[j].Caption == "Producent")					{						drs = db.Tables["producenci"].Select("Id=" + db.Tables["artykuly"].Rows[i][j]);						tmp = (DataRow)drs.GetValue(0);						dce.Value = tmp["producent"];					}					else if (db.Tables["artykuly"].Columns[j].Caption == "jm")					{						drs = db.Tables["jednostki_miary"].Select("Id=" + db.Tables["artykuly"].Rows[i][j]);						tmp = (DataRow)drs.GetValue(0);						dce.Value = tmp["jm"];					}					else					{						dce.Value = db.Tables["artykuly"].Rows[i][j];					}					dr.Cells[j] = dce;				}			}

Oczywiscie maleje komfort uzytkowania, bo trzeba teraz samemu oprogramowac zapisywanie zmian itd,itp ;)

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...