Подешавање приказа master/detail везу две табеле у .NET није баш очигледно некоме ко је навикао на неку другу платформу. Зато, ево кратког примера како то подесити :
// // // kreiraj dataset ds = new DataSet(); // // // kreiraj master tabelu DataTable dtMaster = new DataTable(); dtMaster.Columns.Add ("id_master", typeof (string)); dtMaster.Columns.Add ("description", typeof (string)); // // // napuni je podacima dtMaster.Rows.Add ("1", "prvi"); dtMaster.Rows.Add ("2", "drugi"); dtMaster.Rows.Add ("3", "treci"); dtMaster.Rows.Add ("4", "cetvrti"); // // // podesi primarni kljuc DataColumn[] MasterPrimaryKeyColumns = new DataColumn[1]; MasterPrimaryKeyColumns[0] = dtMaster.Columns["id_master"]; dtMaster.PrimaryKey = MasterPrimaryKeyColumns; // // // dodaj tabelu u DataSet ds.Tables.Add (dtMaster); // // // kreiraj detail tabelu DataTable dtDetail = new DataTable(); dtDetail.Columns.Add("id_detail", typeof(string)); dtDetail.Columns.Add("description", typeof(string)); dtDetail.Columns.Add("id_master", typeof(string)); // // // napuni je podacima dtDetail.Rows.Add("1", "1-1", "1"); dtDetail.Rows.Add("2", "1-2", "1"); dtDetail.Rows.Add("3", "2-3", "2"); dtDetail.Rows.Add("4", "3-4", "3"); dtDetail.Rows.Add("5", "3-5", "3"); dtDetail.Rows.Add("6", "3-6", "3"); dtDetail.Rows.Add("7", "3-7", "3"); dtDetail.Rows.Add("8", "4-8", "4"); dtDetail.Rows.Add("9", "4-9", "4"); dtDetail.Rows.Add("10", "4-10", "4"); // // // podesi primarni kljuc DataColumn[] DetailPrimaryKeyColumns = new DataColumn[1]; DetailPrimaryKeyColumns[0] = dtMaster.Columns["id_detail"]; dtMaster.PrimaryKey = DetailPrimaryKeyColumns; // // // dodaj tabelu u DataSet ds.Tables.Add(dtDetail); // // // podesi relaciju izmedju tabela i nju dodaj u DataSet DataRelation drMasterDetail = new DataRelation("fk_master_detail", dtMaster.Columns["id_master"], dtDetail.Columns["id_master"]); ds.Relations.Add(drMasterDetail); // // // kreiraj BindingSource za Master tabelu BindingSource bsMaster = new BindingSource(); bsMaster.DataSource = dtMaster; // // // BindingSource za Detail tabelu se vezuje za // BindingSource Master tabele, a kao DataMebmer // se navodi naziv relacije Master/Detail BindingSource bsDetail = new BindingSource(); bsDetail.DataSource = bsMaster; bsDetail.DataMember = "fk_master_detail"; // // // povezi BindingSource za odgovarajuce gridove na formi dgMaster.DataSource = bsMaster; dgDetail.DataSource = bsDetail;
Да бисте испробали овај код, уметните га у конструктор форме или у Load() догађај а на форму поставите два грида dgMaster
и dgDetail
.
У овом примеру је намерно дат код који сам прави и пуни табеле да бисте могли да га испробате без потребе да користите неку базу. У програмима ћете углавном податке у табеле учитавати из неке базе. Уместо ручног уметања редова као у овом примеру, ви ћете табелу напунити податке преко DataAdapter-а.