【问题标题】:Search DataSet and Display Multiple Results(Rows) in TextBoxes在文本框中搜索数据集并显示多个结果(行)
【发布时间】:2015-10-08 01:40:59
【问题描述】:

我想在我的 DataSet 中搜索一个客户名称,这个名称将在整个数据集中出现多次,这意味着会有多个结果(返回多行)

当我的搜索按钮被点击时,form2 会打开,理论上应该显示包含客户姓名的所有行,但我该如何实现呢?

我可以让它毫无问题地显示 1 行,但是如何让它显示所有行以及文本框中的数据。

目前我正在使用 foreach 循环用返回的数据填充文本框,但这仅从我的 DataSet 中的 1 行获取数据。

有没有一种方法可以让我的表单自动生成文本框并将数组中的所有数据填充到它们中?当我现在运行我的查询时,它会用 foreach 的最后一次旋转填充 form2 上的文本框。

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();
        }

【问题讨论】:

  • 为什么不使用例如 datagriview 来显示您在数据集中获得的每一行?文本框将只显示一个值而不是几个。你考虑过吗?

标签: c# search dataset


【解决方案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;

【讨论】:

  • 干得好,谢谢!我不得不稍微修改一下代码,从最后 3 行中删除了 var,并在第 3 行的开头添加了 BingingSource。
  • 我很高兴它有帮助。如果这回答了您的问题,请将答案标记为已接受:)
【解决方案2】:

您可以动态生成文本框 是这样的

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 提供的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2014-04-23
    • 2013-08-01
    • 2015-12-16
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多