2014-01-15 30 views
2

這裏的另一個數據網格中所選行顯示在數據網格SQL隊列結果是我的代碼:如何基於VS2012

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上借閱的圖書。

我在做什麼錯?

+0

調試器的東西是你的朋友 –

回答

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事件等

+0

它加載在MainForm_load上 private void frmMain_Load(object sender,EventArgs e) { LoadStudents(); LoadBooks(); LoadBorrow(); LoadQuery(); loadGrid1(); loadGrid3(); } } 編輯:我試過sqlexpress上的查詢,它工作得很好,它顯示書籍brrwd的標題和作者由一個特定的人 –

+0

因爲這是發生在表單加載和假設'dataGridView2'具有所有數據調用時間'loadGrid3';你確定'dataGridView2'有選擇的行嗎?請記住這是一個新鮮的負載,不需要選擇任何東西。 – Abhinav

+0

是的,我認爲選擇正常,我試着在文本框上顯示它的值。你認爲loadGrid3()不應該在主要負載上嗎? –