如何以一种形式(C#)使用2个DataGridViews?

时间:2019-01-24 06:03:29

标签: c# sql

我想以这种形式使用两个DataGridView,它们将从一个数据库中的两个不同表中接收它们的信息。但是当我运行该程序时,两个DataGridViews都只显示第二个表信息。

private void Ring_Load(object sender, EventArgs e)
{
    showdata();
    showmedal();  
}

void showdata()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM Ring", con);
    da.SelectCommand = cmd;
    dt.Clear();
    da.Fill(dt);
    dataGridView1.DataSource = dt;
    dataGridView1.Columns[3].Visible = false;

}

void showmedal()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM medal", con);
    da.SelectCommand = cmd;
    dt.Clear();
    da.Fill(dt);
    dataGridView2.DataSource = dt;
}

3 个答案:

答案 0 :(得分:0)

尝试

private void Ring_Load(object sender, EventArgs e)
{
    showdata();
    showmedal();  
}

void showdata()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM Ring", con);
    da.SelectCommand = cmd;
    dt.Clear();
    da.Fill(dt);
    dataGridView1.DataSource = dt;
    dataGridView1.Columns[3].Visible = false;

}

void showmedal()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM medal", con);
    da.SelectCommand = cmd;
    dt.Clear();
    dt = new DataTable();
    da.Fill(dt);
    dataGridView2.DataSource = dt;
}

答案 1 :(得分:0)

private void Ring_Load(object sender, EventArgs e)
{
    showdata();
    showmedal();  
}

void showdata()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM Ring", con);
    da.SelectCommand = cmd;
    using(DataTable dt = new DataTable())
    {
        da.Fill(dt);
        dataGridView1.DataSource = dt;
        dataGridView1.DataBind();
        dataGridView1.Columns[3].Visible = false;
    }
}
void showmedal()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM medal", con);
    da.SelectCommand = cmd;
    using(DataTable dt = new DataTable())
    {
        da.Fill(dt);
        dataGridView2.DataSource = dt;
        dataGridView2.DataBind();
    }
}

答案 2 :(得分:0)

您似乎正在重用dadt。重用da没问题,但是重用dt是没问题的。将dt分配给DataGridView.DataSource时,不会复制数据!因此,最后,两个DataGridViews将使用同一个DataTable对象,该对象保存第二个表(勋章)中的数据。

您可以尝试以下方法:

private void Ring_Load(object sender, EventArgs e)
{
    showdata();
    showmedal();  
}

void showdata()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM Ring", con);
    da.SelectCommand = cmd;
    DataTable dt1 = new DataTable();
    da.Fill(dt1);
    dataGridView1.DataSource = dt1;
    dataGridView1.Columns[3].Visible = false;

}
void showmedal()
{
    SqlConnection con = new SqlConnection(conn);
    SqlCommand cmd = new SqlCommand("SELECT Number,Weight,Ring_Id FROM medal", con);
    da.SelectCommand = cmd;
    DataTable dt2 = new DataTable();
    da.Fill(dt2);
    dataGridView2.DataSource = dt2;
}

编辑:为清楚起见,重命名了本地DataTable变量。