2015-10-06 75 views
0

我想在DataSet中搜索客戶名稱,該名稱將在整個數據集中出現多次,這意味着將有多於1個結果(返回多行)在文本框中搜索數據集並顯示多個結果(行)

當我的搜索按鈕被點擊時,form2打開,理論上應該顯示包含客戶名稱的所有行,但我如何實現這個?

我可以得到它顯示1行沒有問題,但我將如何顯示所有行和文本框中的數據。

目前,我正在使用foreach循環來填充帶有返回數據的文本框,但這隻從DataSet中的1行獲取數據。

有沒有一種方法可以讓我的表單自動生成文本框並填充它們將數組中的所有數據?當我運行我的查詢時,它將填充form2上的文本框與foreach的最後一次旋轉。

DB Sample

感謝所有幫助

亞當

DataRow[] returnedRows; 

     returnedRows = ds.Tables["Table_Data_1"].Select("cust_name='" + searchFor + "'"); 

     foreach (DataRow returned in returnedRows) 
     { 
      tbName.Text = returned[1].ToString(); 
      tbAddress.Text = returned[2].ToString(); 
      tbPhone.Text = returned[3].ToString(); 

      tbMake.Text = returned[4].ToString(); 
      tbModel.Text = returned[5].ToString(); 
      tbReg.Text = returned[6].ToString(); 
      tbYear.Text = returned[7].ToString(); 

      tbParts1.Text = returned[8].ToString(); 
      tbParts2.Text = returned[9].ToString(); 
      tbParts3.Text = returned[10].ToString(); 
      tbParts3.Text = returned[11].ToString(); 
     } 
+1

爲什麼不使用datagriview來顯示數據集中的每一行?文本框將只顯示一個值不是幾個。你有沒有想過? – VERYNET

回答

1

你只具有單一值的原因似乎是,你的你的文本框的文本設置爲新您選擇的每一行的值。你可以改變你的代碼,而不是添加到該文本框的文本:

tbName.Text += returned[1].ToString() + Environment.NewLine; 

或者你可以而不是將其綁定到一個DataGridView,其目的是顯示錶格數據。假設DataGridView中被命名爲類似customerDataView,

returnedRows = ds.Tables["Table_Data_1"].Select("cust_name='" + searchFor + "'"); 
var newTable = returnedRows.CopyToDataTable(); 
BindingSource bindSource = new BindingSource(); 
bindSource.DataSource = newTable; 
var customerDataView.DataSource = bindSource; 
+0

偉大的工作,謝謝!我不得不稍微修改那些代碼,從最後3行刪除var,並在第3行的開頭添加了BingingSource。 – Nezz

+0

我很高興它有幫助。如果這已回答您的問題,請將答案標記爲已接受:) –

0

您可以生成文本框dinamicaly 它是這樣的

foreach (DataRow returned in returnedRows) 
{ 
    TextBox txt = new TextBox(); 
    txt.ID = "textBox1"; //generate id dinamically can be a count 
    txt.Text = returned[1].ToString(); 
    form1.Controls.Add(txt); 
} 

你已經實現了循環覆蓋每個互爲作用的數據的方式

我改進了以下帖子中的示例代碼

https://stackoverflow.com/a/2229040/5252904回答pr由@rahul支持。

相關問題