Как использовать 2 DataGridViews в одной форме (c #)? - PullRequest
0 голосов
/ 24 января 2019

Я хочу использовать два DataGridView в этой форме, которые будут получать информацию из двух разных таблиц в одной базе данных.Но когда я запускаю программу, оба DataGridView отображают только информацию второй таблицы.

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 голосов
/ 04 апреля 2019
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();
    }
}
0 голосов
/ 04 апреля 2019

Вы, кажется, повторно используете da и dt.Повторное использование da не проблема, но повторное использование dt есть.Когда вы присваиваете dt DataGridView.DataSource, данные НЕ копируются!Таким образом, в конце оба DataGridView будут использовать один и тот же объект 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 для ясности.

0 голосов
/ 24 января 2019

Попробуйте это

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...