如何根据VS2012上另一个数据网格的选定行在数据网格上显示sql队列结果
Posted
技术标签:
【中文标题】如何根据VS2012上另一个数据网格的选定行在数据网格上显示sql队列结果【英文标题】:How to show sql queue results on data grid based on selected rows of another data grid on VS2012 【发布时间】:2014-02-04 14:44:58 【问题描述】:这是我的代码:
public void loadGrid1()
con.Open();
cmd = new SqlCommand(@"SELECT StudID, Stud_Lname, Stud_Fname FROM STUDENTS;",con);
rdr = cmd.ExecuteReader();
while (rdr.Read())
dataGridView2.Rows.Add(rdr[0].ToString(), rdr[1].ToString(), rdr[2].ToString());
con.Close();
public void loadGrid3()
con.Open();
cmd = new SqlCommand(@"SELECT Title, Author FROM Books INNER JOIN Borrow ON Borrow.BookID = Books.BookID WHERE Borrow.StudID = '"+dataGridView2.SelectedRows[0].Cells[0].Value.ToString()+"';", con);
rdr = cmd.ExecuteReader();
while (rdr.Read())
dataGridView3.Rows.Add(rdr[0].ToString(), rdr[1].ToString());
con.Close();
loadGrid1
是我用来加载grid 1
内容的函数,而loadGrid3
应该显示所选学生从grid 1
在grid 3
上借阅的书籍。
我做错了什么?
【问题讨论】:
调试器是你的朋友 【参考方案1】:首先,您的查询容易受到 sql 注入的影响。除此之外,您可能想检查这里创建的实际查询是什么,如果有的话:
SqlCommand(@"SELECT Title, Author FROM Books INNER JOIN Borrow ON Borrow.BookID = Books.BookID WHERE Borrow.StudID = '"+dataGridView2.SelectedRows[0].Cells[0].Value.ToString()+"';");
也许改成这样?:
string qryString = @"SELECT Title, Author FROM Books INNER JOIN Borrow ON Borrow.BookID = Books.BookID WHERE Borrow.StudID = '"+dataGridView2.SelectedRows[0].Cells[0].Value.ToString()+"';"
SqlCommand(qryString);
编辑 1:什么时候调用 Loadgrid3 方法?
编辑 2:尝试按如下方式更改代码:
public void loadGrid1()
con.Open();
cmd = new SqlCommand(@"SELECT StudID, Stud_Lname, Stud_Fname FROM STUDENTS;",con);
rdr = cmd.ExecuteReader();
while (rdr.Read())
dataGridView2.Rows.Add(rdr[0].ToString(), rdr[1].ToString(), rdr[2].ToString());
// check if dataGridView2 has more than 0 rows
// and then select the first row by default
if(dataGridView2.Rows.Count > 0)
dataGridView2.Rows[0].Selected = true
con.Close();
请记住,对于您的直接问题,这是一个肮脏的解决方案,但您可能想对 datagridview 事件等做一些事情。
【讨论】:
它在 MainForm_load 上加载 private void frmMain_Load(object sender, EventArgs e) LoadStudents();加载书(); LoadBorrow();加载查询();负载网格1(); loadGrid3();编辑:我在 sqlexpress 上尝试了查询,它工作得很好,它显示了特定人 brrwd 的书名和作者 由于这发生在表单加载上,并假设dataGridView2
在调用 loadGrid3
时拥有所有数据;你确定dataGridView2
选择了任何行吗?请记住,这是一个新负载,可能不需要选择任何内容。
是的,我认为选择工作正常,我尝试在文本框中显示其值。您认为 loadGrid3() 可能不应该在主负载上吗?
'code' private void dataGridView2_SelectionChanged(object sender, EventArgs e) x= dataGridView2.SelectedRows[0].Cells[0].Value.ToString(); loadGrid3(); /* 它确实有效!谢谢你的想法先生(:*/
考虑到这一点,您正在使用图书馆管理系统(这个看起来像一个)。你展示了所有的学生。现在,当用户单击网格中的一行时,会触发一个事件,该事件会获取该学生的书籍列表。如果这些事情仅在表单加载中完成,则没有事件触发器的范围/使用。您必须在网格中处理某种选择事件,然后使用 loadGrid3。以上是关于如何根据VS2012上另一个数据网格的选定行在数据网格上显示sql队列结果的主要内容,如果未能解决你的问题,请参考以下文章