gpt4 book ai didi

c# - 使用表中的外键在连接到MYSQL的C#DatagridView中插入行

转载 作者:行者123 更新时间:2023-11-29 15:37:56 25 4
gpt4 key购买 nike

我正在尝试制作一个应用来订购。我在Mysql中有4个表:

CREATE TABLE `containers` (
`id_containers` int(11) NOT NULL AUTO_INCREMENT,
`container_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id_containers`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4

CREATE TABLE `order` (
`id_order` int(11) NOT NULL AUTO_INCREMENT,
`out_number` varchar(45) NOT NULL,
`out_date` datetime DEFAULT CURRENT_TIMESTAMP,
`order_date` datetime DEFAULT CURRENT_TIMESTAMP,
`client` varchar(45) NOT NULL,
`client_ref` varchar(45) DEFAULT NULL,
`billed` tinyint(1) DEFAULT NULL,
`notes` longtext,
PRIMARY KEY (`id_order`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4

CREATE TABLE `order_details` (
`id_order_item` int(11) NOT NULL AUTO_INCREMENT,
`id_order` int(11) NOT NULL,
`id_product` int(11) NOT NULL,
`id_container` int(11) NOT NULL,
`pallets` int(11) DEFAULT NULL,
`volumes` int(11) DEFAULT NULL,
`caliber` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id_order_item`),
KEY `id_container` (`id_exportation`),
CONSTRAINT `id_container` FOREIGN KEY (`id_order`) REFERENCES `containers` (`id_containers`),
CONSTRAINT `id_order` FOREIGN KEY (`id_order`) REFERENCES `order` (`id_order`),
CONSTRAINT `id_product` FOREIGN KEY (`id_order`) REFERENCES `products` (`id_product`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

CREATE TABLE `products` (
`id_product` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id_product`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


在我的C#应用​​程序中,我创建了一个DatagridView,并使用INNER JOIN函数在Order中显示项目。

private BindingSource GetOrderList()
{
string connString = ConfigurationManager.ConnectionStrings["ManagementApp.Properties.Settings.ConnectionString"].ConnectionString;
MySqlConnection con = new MySqlConnection(connString);
con.Open();

mysqladapter1.SelectCommand = new MySqlCommand("SELECT products.product_name as 'Produto', containers.container_name as 'Vasilhame', order_details.pallets 'Pallets', order_details.volumes as 'Volumes', order_details.caliber as 'Calibre' " +
"FROM order" +
"INNER JOIN order_details ON order.id_exportation = order_details.id_order " +
"INNER JOIN products ON order_details.id_product = products.id_product " +
"INNER JOIN containers ON order_details.id_container = containers.id_containers " +
"WHERE order.id_order = 1;", con);
cmdbuilder = new MySqlCommandBuilder(mysqladapter1);

DataTable table = new DataTable();
mysqladapter1.Fill(table);

OrderBindingSource.DataSource = table;

return OrderBindingSource;
}


可以向此datagridview添加新行以插入产品项并删除,但是我不知道如何将其发送到MYSQL,因为我在每行中都有多个带有外键的表。
我要在产品单元格中单击“输入”,打开一个包含所有产品的窗口,然后选择我也要在行和容器中插入的产品。

最佳答案

我会尽可能使用DataGridViewComboBoxColumn。就像这样:

DataGridViewComboBoxColumn dcb = this.DataGridView1.Columns("Category");
dcb.ValueMember = "ID";
dcb.DisplayMember = "CategoryName";
dcb.DataSource = DataTableCategories;


如果确实需要运行对话框来选择特定项目,则可以使用隐藏值列( DataGridViewTextBoxColumn用于存储选定的ID),双色列( DataGridViewTextBoxColumn)和 DataGridViewButtonColumn的组合来触发新对话框使用Button(您可以为每个列分配不同的对话框,以通过e.RowIndex检查e.ColumnIndex,甚至检查每一行)。如果需要将某些内容传递给按钮,则可以使用 TagDataGridViewButtonCell属性。
使用这种方法,您可以有效地模拟 DataGridViewComboBox逻辑,但是如果您确实需要一个对话框来为最终用户提供选择帮助,则可以合理地应用它。
显然,您将必须处理Click事件并为每次单击创建所需形式的新实例,创建Public ByRef DataGridView或更好的DataTable(用于DGV数据源), ShowDialog(),并确保在完成编辑后,您可以 DataGridView之前,必须先更新 DataTable(行或 close()行)。

关于c# - 使用表中的外键在连接到MYSQL的C#DatagridView中插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com