Ich versuche den Wert einer Zelle in einer Datagridview-Spalte zu ändern, abhängig von der Auswahl in einer hinzugefügten Combobox-Spalte in derselben Datagridview.C# ändern Gridview Spalte Daten nach Gridview Combobox?
Ich habe mit allen möglichen BindingSources herumgespielt, aber nichts scheint es richtig zu machen.
Der Code Ich verwende ist:
conn = new SqlConnection(DBConnectionString);
select_order = new SqlCommand("SELECT orderNum, orderBy, orderShipadrs, orderDate FROM tblOrders WHERE orderNum=" + OrderID, conn);
da1 = new SqlDataAdapter(select_order);
select_lines = new SqlCommand("SELECT linenum, fkprdctnum, lineQuantity, lineprdctPrice FROM tblOrderLines WHERE fkOrdernum=" + OrderID, conn);
da2 = new SqlDataAdapter(select_lines);
da2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
select_products = new SqlCommand("SELECT * FROM tblProducts", conn);
da3 = new SqlDataAdapter(select_products);
Orders = new DataSet();
try
{
da1.Fill(Orders, Order);
da2.Fill(Orders, Lines);
da3.Fill(Orders, Products);
}
catch
{
MessageBox.Show("There was an error connecting to the database.");
}
DataRelation prdctprice = new DataRelation(Relations, Orders.Tables[Products].Columns["prdctNum"], Orders.Tables[Lines].Columns["fkPrdctnum"]);
Orders.Relations.Add(prdctprice);
CurrentOrder.DataSource = Orders.Tables[Order];
CurrentOrder.Columns["orderNum"].HeaderText = "Number";
CurrentOrder.Columns["orderNum"].Width = 50;
CurrentOrder.Columns["orderBy"].HeaderText = "Customer Name";
CurrentOrder.Columns["orderBy"].Width = 150;
CurrentOrder.Columns["orderShipadrs"].HeaderText = "Shipping Address";
CurrentOrder.Columns["orderShipadrs"].Width = 200;
CurrentOrder.Columns["orderDate"].HeaderText = "Order Date";
CurrentOrder.Columns["orderDate"].Width = 100;
//masterBindingSource.DataSource = Orders;
//masterBindingSource.DataMember = Products;
CurrentLine.DataSource = Orders.Tables["Lines"];
DataGridViewComboBoxColumn prod = new DataGridViewComboBoxColumn();
prod.DataSource = Orders.Tables[Products];
prod.DisplayMember = "prdctName";
prod.ValueMember = "prdctNum";
prod.HeaderText = "Product";
CurrentLine.Columns.Add(prod);
//detailBindingSource.DataSource = masterBindingSource;
//detailBindingSource.DataMember = Relations;
CurrentLine.Columns["fkPrdctnum"].Visible = false;
CurrentLine.Columns["linenum"].Width = 60;
CurrentLine.Columns["linenum"].HeaderText = "Number";
CurrentLine.Columns["linenum"].ReadOnly = true;
CurrentLine.Columns["lineQuantity"].HeaderText = "Quantity";
CurrentLine.Columns["lineQuantity"].Width = 70;
CurrentLine.Columns["linePrdctPrice"].HeaderText = "Price";
CurrentLine.Columns["linePrdctPrice"].ReadOnly = true;
Nur damit Sie ein visuelles haben, um es einfach: ich die Zellen in dem „Preis“ -Spalte will in Abhängigkeit von der Auswahl zu ändern, in dem " Produkt "Kombibox. Die Combobox nimmt ihre Daten aus einer Tabelle in der Datenmenge namens "Products", während der Rest des Datagrids seine Daten aus einer Tabelle namens "Lines" bezieht.
Die Frage ist, ist meine einzige Option, die Spalte "Preis" zu entfernen und manuell eine weitere Spalte hinzuzufügen, die sich mit der Combobox ändert? Wenn nicht, welche anderen Optionen habe ich?
__Nicht__ ein 'DataGridView'a' GridView' oder ein 'DataGrid' aufrufen !! Dies ist falsch und verwirrend, da es sich um verschiedene Steuerelemente handelt. Ruf die Dinge immer nach ihrem __right__ Namen! Ja, es dauert __four__ Buchstaben mehr zu tippen. - Wie für Ihre Frage: Wenn die DGVs datengebunden sind, müssen Sie nicht die Zelle, sondern die DataSource ändern. – TaW
Ich habe das versucht, aber das Ändern der DataSource ändert es für ALLE Spalten, und ich möchte nur die eine Spalte ändern. Ich nehme an, es gibt keine Möglichkeit, dies zu tun, außer eine andere Spalte manuell hinzuzufügen? –