如何修复 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);
【讨论】:
ds
和 dt
是不同的东西。
执行 dt.Tables.Clear();
如果dt
是一个DataTable,它没有Tables
集合。在发布之前测试您的代码。
我认为他使用 DataSet :))
不,它看起来像一个数据表。他从不清除行,所以当适配器填充它时,它会不断添加更多行。【参考方案2】:
您需要在重新填充之前清除DataGridView1
:
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
【讨论】:
当网格使用数据源时不能这样做。【参考方案3】:只需清除您的数据网格视图
this.dataGridView1.Rows.Clear();
【讨论】:
当网格使用数据源时不能这样做。以上是关于如何修复 DataGridView 中的显示?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复错误:从不同的线程访问了“dataGridView1”控件[重复]
如何仅使用选定的列从Access数据库填充我的DataGridView?