【发布时间】:2019-11-04 18:45:12
【问题描述】:
我使用 Nordwind DB
这是我的应用程序的外观:
我想从第一个网格视图中选择一行,并在第二个网格视图中显示来自这些客户的订单,我还想在第一个网格视图中过滤 1 列或更多列。
GridView1:
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Northwind.mdf;Integrated Security=True");conn.Open();
SqlCommand cmd = new SqlCommand("select * from Customers", conn);
SqlDataReader rdr = cmd.ExecuteReader();
List<Customer> Customers = new List<Customer>();
while (rdr.Read())
{
Customer c = new Customer();
c.CustomerID = (string)rdr["CustomerID"];
c.CompanyName = (string)rdr["CompanyName"];
c.ContactName = (string)rdr["ContactName"];
c.City = (string)rdr["City"];
c.Country = (string)rdr["Country"];
c.Phone = (string)rdr["Phone"];
Customers.Add(c);
}
dataGridView1.DataSource = Customers;
}
GridView2:
private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Northwind.mdf;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from Orders", conn);
SqlDataReader rdr = cmd.ExecuteReader();
List<Order> Orders = new List<Order>();
while (rdr.Read())
{
Order o = new Order();
o.OrderID = (int)rdr["OrderID"];
o.OrderDate = (DateTime)rdr["OrderDate"];
o.ShipName = (string)rdr["ShipName"];
o.ShipCity = (string)rdr["ShipCity"];
o.ShipCountry = (string)rdr["ShipCountry"];
Orders.Add(o);
}
dataGridView2.DataSource = Orders;
}
选择整行:
{
Customer c = (Customer)dataGridView1.CurrentRow.DataBoundItem;
}
我认为 GridView2 中的 SqlCommand 不好,我也认为我需要更新表单,但我不知道该怎么做。
谁能给我正确的代码,甚至可以解释一下哪个部分做什么?
提前感谢,如果您需要更多信息,请说出来。
【问题讨论】:
-
您需要获取客户(所选行的)的值并将其传递给第二个网格视图的 sql...
-
我做了这个
private void dataGridView1_SelectionChanged(object sender, EventArgs e) { Customer c = (Customer)dataGridView1.CurrentRow.DataBoundItem; }我可以用那个吗? -
使用调试器。运行这段代码时“c”的值是多少?
-
嗯,这给了你对象..看起来你的订单对象需要 customerId。