如何修复 DataGridView 中的显示?

Posted

技术标签:

【中文标题】如何修复 DataGridView 中的显示?【英文标题】:How to fix the display in DataGriView? 【发布时间】: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 并将其存储为字段。 【参考方案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();

【讨论】:

当网格使用数据源时不能这样做。

以上是关于如何修复 DataGridView 中的显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误:从不同的线程访问了“dataGridView1”控件[重复]

c# datagridview1 指定某列数据居中

如何仅使用选定的列从Access数据库填充我的DataGridView?

如何将多个表中的数据显示到dataGridView

C#/.NET 如何突出显示 DataGridView 中的某些行

如何将DataGridView中的滚动条显示出来