2016-05-14 40 views
0

我有以下代碼:有沒有排在posistion [0]

private void ReturnForm_Load(object sender, EventArgs e) 
{ 
     string select = "SELECT TransactionID FROM [Transaction] WHERE ReturnDate = '" + null + "'"; 
     comboBox1.DisplayMember = "TransactionID"; 
     comboBox1.ValueMember = "TransactionID"; 
     comboBox1.DataSource = con.FillTable(select); 
     comboBox1.SelectedIndex = -1; 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     int rentduration; 
     int lateduration; 
     double extracharge; 
     int totalprice; 
     int price; 

     string a = "SELECT StaffID,CarID,ClientName,StartDate,EndDate FROM [Transaction] WHERE TransactionID = '" + comboBox1.Text + "'"; 
     string b = "SELECT * FROM MsCar WHERE CarrID = '" + label12.Text + "'"; 

     DataTable dt = con.FillTable(a); 
     DataTable da = con.FillTable(b); 
     dataGridView1.DataSource = dt; 

      label10.Text = dt.Rows[0][1].ToString(); 
      label11.Text = dt.Rows[0][3].ToString(); 
      label12.Text = dt.Rows[0][2].ToString(); 
      label13.Text = dt.Rows[0][4].ToString(); 
      label14.Text = dt.Rows[0][5].ToString(); 
      label15.Text = DateTime.Now.ToString("MM dd YYYY"); 
} 

當我運行的形式,該代碼拋出錯誤:

There is no row at position 0.

但是,當我使用的datagridview:

datagridview1.datasource = dt; 

顯示所有數據。

請幫幫我。

+0

[SQL注入警報(http://msdn.microsoft.com/en-us/library/ ms161953%28v = sql.105%29.aspx) - 你應該不要**連接你的SQL語句 - 使用**參數化查詢**來代替以避免SQL注入 –

+0

嘗試通過在行處插入一個斷點來追蹤代碼:'DataTable dt = con.FillTable(a);'並查看將在數據表的第一行填充什麼以及dt.Rows [0] [1 ] .ToString();' – eFarzad

+0

並繼續跟蹤以查找可能導致問題的任何事件觸發。 – eFarzad

回答

1

嘗試在提交後使用組合框選擇組合框選擇索引更改也會在關閉窗體時發生,而選定索引更改事件函數與空字符串一起使用。同時發送數據到SqlDataAdapter時刪除空格。

使用

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e) 

,而不是

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 

string a = "SELECT StaffID,CarID,ClientName,StartDate,EndDate FROM [Transaction] WHERE TransactionID = '" + comboBox1.Text.Trim() + "'"; 
+0

謝謝先生,我明白了! –