首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在一个datagridview中组合两个查询

在一个datagridview中组合两个查询
EN

Stack Overflow用户
提问于 2018-08-28 17:21:37
回答 3查看 435关注 0票数 1

我的应用程序通过openfiledialog连接到excel文件。我有两次搜索,第一次搜索和第二次搜索。我希望在一个数据视图中获得他们的结果。我的代码(主搜索):

代码语言:javascript
代码运行次数:0
运行
复制
private void searchbtn_Click(object sender, EventArgs e)
{
    try
    {
        string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
        OleDbConnection conn = new OleDbConnection(connStr);
        OleDbDataAdapter da = new OleDbDataAdapter("Select * from [" + testcb.SelectedItem.ToString() + "$] where [" + comboBox1.SelectedItem.ToString() + "] = '" + textBox5.Text + "'", conn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dataGridView2.DataSource = dt;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

和二次搜索:

代码语言:javascript
代码运行次数:0
运行
复制
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
        OleDbConnection conn = new OleDbConnection(connStr);
        OleDbDataAdapter da = new OleDbDataAdapter("Select * from [" + testcb.SelectedItem.ToString() + "$] where [" + addcb.SelectedItem.ToString() + "] = '" + addtb.Text + "'", conn);
        DataTable ds = new DataTable();
        da.Fill(ds);
        dataGridView2.DataSource = ds;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-28 17:47:25

在辅助搜索中,而不是:

代码语言:javascript
代码运行次数:0
运行
复制
dataGridView2.DataSource = ds;

尝试:

代码语言:javascript
代码运行次数:0
运行
复制
DataTable combinedData = (DataTable)(dataGridView2.DataSource);
combinedData.Merge(ds);
dataGridView2.DataSource = combinedData;

您可能还必须注意避免在新数据源中出现重复项。另外:我没有测试这个解决方案,它只是一个想法。

希望能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2018-08-28 17:40:30

你可以有两个DataTables,比如说dt1dt2和一个合并的dtAll。然后,您可以合并2并将其设置为DataSource

代码语言:javascript
代码运行次数:0
运行
复制
private UpdateDataSource()
{
    dataGridView2.Rows.Clear();
    dataGridView2.Refresh();
    dtAll.Clear();

    if(dt1 == null && dt2 != null)
    {
        dtAll = dt2;
    }
    else if(dt2 == null && dt1 != null)
    {
        dtAll = dt1;
    }
    else if(dt1 != null && dt2 != null)
    {
        dtAll = dt1.Copy();
        dtAll.Merge(dt2);
    }
    else
    {
        dtAll = null;
    }
    dataGridView2.DataSource = dtAll;
}

您的事件处理程序应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
        OleDbConnection conn = new OleDbConnection(connStr);
        OleDbDataAdapter da = new OleDbDataAdapter("Select * from [" + testcb.SelectedItem.ToString() + "$] where [" + addcb.SelectedItem.ToString() + "] = '" + addtb.Text + "'", conn);
        dt2.Clear();
        da.Fill(dt2);
        UpdateDataSource();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-28 17:50:50

您需要使用merge。这里有一个关于它的教程here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52054350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档