【问题标题】:displaying data from multiple tables in datagridview在 datagridview 中显示来自多个表的数据
【发布时间】:2023-03-10 18:46:01
【问题描述】:

我在一列中有一个表格列表,在另一列中有 n 个复选框。我想查看我通过单击复选框选择的表的数据

我的代码是

        for (int i = 0; i < dataGridView2.Rows.Count; i++ )
        {
            if (dataGridView2.Rows[i].Cells[1].Value != null)
            {
                if ((Boolean)dataGridView2.Rows[i].Cells[1].Value == true)
                {
                    try
                    {
                        string myConnection="datasource=localhost;database=dmrc;port=3306;username=root;password=root";
                        MySqlConnection myConn = new MySqlConnection(myConnection);
                        string query = "select * from dmrc." + dataGridView2.Rows[i].Cells[0].Value.ToString();
                        MySqlCommand cmdDatabas = new MySqlCommand(query, myConn);
                        MySqlDataAdapter myDataAdapter = new MySqlDataAdapter();
                        myDataAdapter.SelectCommand = cmdDatabas;
                        DataTable dbdataset = new DataTable();
                        myDataAdapter.Fill(dbdataset);
                        BindingSource bSource = new BindingSource();
                        bSource.DataSource = dbdataset;
                        f1.dataGridView1.DataSource = bSource;
                        myDataAdapter.Update(dbdataset);
                        f1.Show();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

但每次只显示1个表的数据。我应该改变什么以及在哪里..?

【问题讨论】:

    标签: c# visual-studio datagridview append


    【解决方案1】:

    在回答这个问题之前,请您确认一下 1) 如果 dataGridView2.Rows[i].Cells[1] 是复选框列 2) dataGridView1 是另一个网格,您希望在其中显示一个在另一个下方的表格 3) 构成dataGridView1 的数据源的表是否具有相同顺序的相同列? 由于提供的信息不充分。

    当且仅当“select *”以相同的顺序给出相同的列时,您可以添加多个表。在 for 循环之前创建一个空数据表(我们称之为 master)。在每次迭代中,将新的数据表 dbdataset 合并到主数据表。您可以在此处查看语法:link。这提供了有关如何处理列和主键的详细信息。数据表中的自定义修改也可以在构建之后进行。语法在这里link。 希望这会有所帮助!

    DataTable masterdbdataset = new DataTable();
    //Perform custom operations here if necessary
        BindingSource bSource = new BindingSource();
    
        for (int i = 0; i < dataGridView2.Rows.Count; i++ )
        {
            if (dataGridView2.Rows[i].Cells[1].Value != null)
            {
                if ((Boolean)dataGridView2.Rows[i].Cells[1].Value == true)
                {
                    try
                    {
                        string myConnection="datasource=localhost;database=dmrc;port=3306;username=root;password=root";
                        MySqlConnection myConn = new MySqlConnection(myConnection);
                        string query = "select * from dmrc." + dataGridView2.Rows[i].Cells[0].Value.ToString();
                        MySqlCommand cmdDatabas = new MySqlCommand(query, myConn);
                        MySqlDataAdapter myDataAdapter = new MySqlDataAdapter();
                        myDataAdapter.SelectCommand = cmdDatabas;
                        DataTable dbdataset = new DataTable();
                        myDataAdapter.Fill(dbdataset);
                        myDataAdapter.Update(dbdataset);
                        masterdbdataset.Merge(dbdataset);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
    }
        bSource.DataSource = masterdbdataset;
        f1.dataGridView1.DataSource = bSource;
        f1.Show();
    

    【讨论】:

    • yes..cells[1] 是复选框 dataGridView1 是另一个网格
    • 好的,所以问题似乎在这里:f1.dataGridView1.DataSource = bSource;循环的每次迭代只是扫描下一个表并使用当前表的行重置 dataGridView1 中的内容。您可能想要做的是将行“附加”到您的 dataGridView1。
    • 是的..它正在用前一个表替换新表并显示当前表.. bt 如何附加它以便我可以查看多个表..?
    • 它对我没有帮助..请提出其他建议
    • 我可能会将您与非常冗长的链接混淆。但它们有利于经历一次以更好地理解。我已经添加了代码,但我没有在机器上运行它,所以请在调试模式下运行它以防出错。这个想法是让 masterdbdataset 存储所有数据,并且随着每次迭代,其中的行数应该增加。我知道我已经说了很多,但这只是为了它的重要性——您的查询必须以相同的顺序返回相同的列,“合并”功能才能工作。如果需要,在自定义逻辑中处理主键。
    猜你喜欢
    • 2015-04-25
    • 2016-02-08
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多