Nargil Opublikowano 12 Stycznia 2006 Zgłoś Opublikowano 12 Stycznia 2006 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 17 Stycznia 2006 Zgłoś Opublikowano 17 Stycznia 2006 (edytowane) 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 17 Stycznia 2006 przez Nargil Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...