简体   繁体   English

如何基于VS2012上另一个数据网格的选定行在数据网格上显示SQL队列结果

[英]How to show sql queue results on data grid based on selected rows of another data grid on VS2012

Here is my code: 这是我的代码:

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 is the function I used to load contents of grid 1 , while loadGrid3 is supposed to show the Books borrowed on grid 3 by the selected student from grid 1 . 我使用loadGrid1函数来加载grid 1内容,而loadGrid3应该显示从grid 1选择的学生在grid 3上借来的书。

What am I doing wrong? 我究竟做错了什么?

First, your query is susceptible to sql injection. 首先,您的查询容易受到sql注入的影响。 That aside, you might want to check what is the actual query that is getting created here, if at all: 除此之外,您可能想要检查在这里创建的实际查询是什么,如果有的话:

SqlCommand(@"SELECT Title, Author FROM Books INNER JOIN Borrow ON Borrow.BookID = Books.BookID WHERE Borrow.StudID = '"+dataGridView2.SelectedRows[0].Cells[0].Value.ToString()+"';");

perhaps change it to this?: 也许将其更改为此?:

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);

Edit 1: When is Loadgrid3 method being called? 编辑1:何时调用Loadgrid3方法?

Edit 2: Try and change the code as follows: 编辑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();
}

Remember this is a dirty fix for your immediate question, but you might want to do something with datagridview events etc. 请记住,这对于您的紧迫问题是一个肮脏的解决方法,但是您可能想对datagridview事件等做些事情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM