我的视觉基础项目需要帮助。我有一个Store.accdb数据库 它有2个表,客户和订单。我希望能够在文本框中输入客户的名称(或名称的一部分),然后在单击搜索按钮时在DataGridView中显示名称。然后在单独的DataGridView上,当用户单击“显示”按钮时,我想从第一个DataGridView显示所选客户的订单。
编辑:这是2个表格的样子
Customers table = custNum,custName,custAddress,custPhone
订单表= orderNum,orderItem,custNum,price,qty
con.ConnectionString = dbProvider & dbSource
Try
con.Open()
sql = "SELECT custName FROM tblCustomers WHERE custName LIKE '%" & tbSearch.Text.ToUpper & "%'"
ds = New DataSet
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "CustomerDataset")
gridCustomers.DataSource = ds
gridCustomers.DataMember = "CustomerDataSet"
con.Close()
Catch ex As Exception
MessageBox.Show("Could not establish a connection", "Database Error")
End Try
此代码工作正常,它填充了我的客户datagridview。每当我只输入客户名称的一部分时,我会得到多行。如果我在文本框中输入“sm”,它将显示名称中包含“sm”的所有客户。当我点击显示按钮时,如何在第二个datagridview中显示所选客户(来自1st datagridview)订单?我希望我有意义,英语不是我的第一语言所以请耐心等待。
谢谢!
答案 0 :(得分:0)
你必须玩许多活动。
从datagridview
选择客户时,您必须使用datagridview's selectedIndexChange
事件(假设您有按钮可在datagridview
中选择)
您必须在datagridview's selectedIndexChange
事件
con.ConnectionString = dbProvider & dbSource
Try
con.Open()
sql = "SELECT * FROM tblorders WHERE custName ='" & gridSelectedValue & "'"
//Assuming you have custName column in order table
ds = New DataSet
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "OrderDataset")
gridCustomers.DataSource = ds
gridCustomers.DataMember = "OrderDataset"
con.Close()
Catch ex As Exception
MessageBox.Show(ex.message)
End Try
修改
如果你没有那么的custName,你应该在DataGridView的查询中有CustNum。
答案 1 :(得分:0)
第1步 - 更改有效的查询。不要只选择客户名称,而是选择客户ID或该表的主键。
步骤2 - 在显示数据时,添加一个锚标记,其中包含一个链接到显示订单的新页面的查询字符串。 html看起来像这样:
<a href="orders.aspx?customer_id=1">Fred</a>
在orders.aspx中,调用一个带回customer_id = 1的所有订单的查询。
哦,是的,顺便说一下,在将所有表单和url变量发送到数据库之前将其转换为参数。
答案 2 :(得分:0)
实际上,你只需要在两个表之间定义一个“外键”,你可以看到这篇文章知道如何:
www.codeproject.com/Articles/28273/Xml-Database-Demo
阅读“添加DataTable关系”部分。
如果您使用Access创建了数据库,则必须执行相同的操作。如果你正在使用SQL,那就是同样的事情。