2015-10-06 77 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支持。

相关问题