【问题标题】:How to fix the display in DataGriView?如何修复 DataGridView 中的显示?
【发布时间】:2021-03-11 22:09:34
【问题描述】:

当我单击 Load_Table 按钮时,我想在 DataGridView 中显示我的数据库中的表,所以我编写了该代码:

private void Load_Table_Click(object sender, EventArgs e)
        {
            try
            {
                using (SqlConnection cn = new SqlConnection("Server=ZIKO_RED2486;Database=Students;Integrated Security=true"))
                {
                    if (cn.State == ConnectionState.Open)
                        cn.Close();
                    using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Student", cn))
                    {
                        cn.Open();
                        da.Fill(dt);
                        dataGridView1.DataSource = dt;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
  • 当我第一次点击它按预期显示学生表时, 但是第二次点击时DataGridView显示Student 表两次。 也就是说 :

  • 看起来 Load_Table 按钮获取学生表的数据 并显示在datagridview的内容上。

  • 我想在获取之前删除datagridview的内容 表中的数据以显示一次。但是还是不行。

请帮忙。

【问题讨论】:

  • 由于您要存储 DataTable,因此请在再次填充之前将其设为新的。您还可以在同一过程中创建一个 DataTable (var dt = new DataTable; da.Fill(dt); dataGridView1.DataSource = dt;)。如果您需要与其他控件共享数据,请使用 BindingSource 并将其存储为字段。

标签: c# sql winforms ado.net display


【解决方案1】:
 private void Load_Table_Click(object sender, EventArgs e)
    {
        try
        {
            using (SqlConnection cn = new SqlConnection("Server=ZIKO_RED2486;Database=Students;Integrated Security=true"))
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Student", cn))
                {
                    cn.Open();
                    // we clear 
                    dt.Tables.Clear();
                    // then we fill 
                    da.Fill(dt);
                    dataGridView1.DataSource = dt;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

【讨论】:

  • dsdt 是不同的东西。
  • 执行 dt.Tables.Clear();
  • 如果dt 是一个DataTable,它没有Tables 集合。在发布之前测试您的代码。
  • 我认为他使用 DataSet :))
  • 不,它看起来像一个数据表。他从不清除行,所以当适配器填充它时,它会不断添加更多行。
【解决方案2】:

您需要在重新填充之前清除DataGridView1

dataGridView1.Rows.Clear();
dataGridView1.Refresh();

【讨论】:

  • 当网格使用数据源时不能这样做。
【解决方案3】:

只需清除您的数据网格视图

this.dataGridView1.Rows.Clear();

【讨论】:

  • 当网格使用数据源时不能这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
相关资源
最近更新 更多