Hej.. Det kan bli trixigt. Jag vet inte om det går, för att products och orders har en many-to-many relation. Får det att fungera om jag gör så här, men vet inte om det är "rätt" i slutändan.Databas, datagrids
Är det någon som kan hjälpa mig med mitt problem.
Jag vill hämta information från databasen, och jag har 2 datagrids. I den ena ska en lista på produkter visas, och i den andra ska man få fram vilka kunder som köpt en viss produkt.. och den datagrid:en ska givetvis förändras och anpassas efter den datagrid:en som produkterna listas i.
Jag får det att fungera om jag bara har en koppling mellan 2 tabeller i databasen, men nu är det 4 tabeller som är inblandade och hur jag än vrider och vänder på relationerna mellan dessa så får jag det inte att fungera. Felmeddelandet blir : "Cannot create a child list for field relOrdersOrderdet."
Koden (förutom connection strängen) :
DataSet ds = new DataSet();
SqlCommand cmdProducts = SQLConn.CreateCommand();
cmdProducts.CommandType = System.Data.CommandType.Text;
cmdProducts.CommandText="SELECT * FROM Products";
SqlDataAdapter daProducts = new SqlDataAdapter();
daProducts.SelectCommand = cmdProducts;
daProducts.Fill(ds, "Products");
SqlCommand cmdOrderdet = SQLConn.CreateCommand();
cmdOrderdet.CommandType = System.Data.CommandType.Text;
cmdOrderdet.CommandText="SELECT * FROM [Order Details]";
SqlDataAdapter daOrderdet = new SqlDataAdapter();
daOrderdet.SelectCommand = cmdOrderdet;
daOrderdet.Fill(ds, "Orderdet");
SqlCommand cmdOrders = SQLConn.CreateCommand();
cmdOrders.CommandType = System.Data.CommandType.Text;
cmdOrders.CommandText="SELECT * FROM Orders";
SqlDataAdapter daOrders = new SqlDataAdapter();
daOrders.SelectCommand = cmdOrders;
daOrders.Fill(ds, "Orders");
SqlCommand cmdCustomers = SQLConn.CreateCommand();
cmdCustomers.CommandType = System.Data.CommandType.Text;
cmdCustomers.CommandText="SELECT * FROM Customers";
SqlDataAdapter daCustomers = new SqlDataAdapter();
daCustomers.SelectCommand = cmdCustomers;
daCustomers.Fill(ds, "Customers");
ds.Relations.Add(new DataRelation("relProdOrderdet",
ds.Tables["Products"].Columns["ProductID"],
ds.Tables["Orderdet"].Columns["ProductID"]));
ds.Relations.Add(new DataRelation("relOrdersOrderdet",
ds.Tables["Orders"].Columns["OrderID"],
ds.Tables["Orderdet"].Columns["OrderID"]));
ds.Relations.Add(new DataRelation("relCustomersOrders",
ds.Tables["Customers"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["CustomerID"]));
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "Products";
dataGrid2.DataSource = ds;
dataGrid2.DataMember = "Products.relProdOrderdet.relOrdersOrderdet.relCustomersOrders";
-----------------------------------------
Gör jag däremot samma sak men bara med en relation så får jag det att fungera, alltså :
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "Products";
dataGrid2.DataSource = ds;
dataGrid2.DataMember = "Products.relProdOrderdet";
-----------------------------------------
Nån som ser felet?Sv: Databas, datagrids
Jag vet faktiskt inte om den reder ut det direkt.
Programmeringsmässigt kan du fixa det genom att köra dataviews och .GetChildRows()
men då måste du som sagt fixa allt själv.
Visa GÄRNA att jag har fel i detta!!!
/mickeSv:Databas, datagrids
ds.Relations.Add(new DataRelation("relProdOrderdet",
ds.Tables["Products"].Columns["ProductID"],
ds.Tables["Orderdet"].Columns["ProductID"], false));
ds.Relations.Add(new DataRelation("relOrdersOrderdet",
ds.Tables["Orderdet"].Columns["OrderID"],
ds.Tables["Orders"].Columns["OrderID"], false));
ds.Relations.Add(new DataRelation("relCustomersOrders",
ds.Tables["Orders"].Columns["CustomerID"],
ds.Tables["Customers"].Columns["CustomerID"], false));