我想在我的DataSet中搜索客户名称,这个名称将在整个数据集中出现多次,这意味着将有多于1个结果(返回多行)
单击我的搜索按钮时,form2打开,理论上应显示包含客户名称的所有行,但我该如何实现?
我可以让它显示1行没有问题,但是如何让它显示所有行和文本框中的数据。
目前我正在使用foreach循环来填充返回数据的文本框,但这只会从我的DataSet中的1行获取数据。
有没有办法可以让我的表单自动生成文本框并填充数组中的所有数据?当我在此刻运行查询时,它会使用foreach的最后一次旋转填充form2上的文本框。
感谢任何帮助
亚当
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();
}
答案 0 :(得分:1)
您出现单个值的原因是您要将文本框的文本设置为您选择的每一行的新值。您可以将代码更改为添加到文本框中的文本:
tbName.Text += returned[1].ToString() + Environment.NewLine;
或者您可以将其绑定到DataGridView,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;
答案 1 :(得分: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由@rahul提供答案。