繁体   English   中英

C#清除绑定到数据源的datagridview

[英]c# clear datagridview bound to datasource

我有一个绑定到数据源的datagridview,所有标头都添加到具有datapropertyname设置的列集合中。

当我使用清除datagridview时

DataGridView1.DataSource = null;

标头也消失了,当我再次填充datagridview时,标头文本就是数据库列名。 如何在不删除标题的情况下清除绑定的datagridview?

你可以用这个

if (dataGridViewNotas.DataSource != null)
    ((DataTable) dataGridViewNotas.DataSource).Rows.Clear();

解决此问题的方法之一是使用集合作为数据源,

创建一个具有代表数据源的属性的类(每个属性将代表数据库中的一列)

public class Student
{
   public string Name { get; set; }
   public string Address { get; set; }
}

您需要手动将列添加到datagridview并为每列设置相关的DataPropertyName并设置HeaderText 从数据库加载数据时,首先将此数据填充到列表中。 因此,您将拥有一个List<Student>

List<Student> studentDetail = new List<Student>();

将此设置为datagridview的数据源。

dataGridView1.DataSource = studentDetail;

清除数据源

要清除网格的数据源,只需创建一个空的Student列表,然后再次将其设置为数据源。 当您进行类似设置时,将保留每列的标题。

List<Student> emptyStudentDetail = new List<Student>();
dataGridView1.DataSource = emptyStudentDetail;

如果您不想使用对象集合,而仍然使用this.dataGridView1.DataSource = null;刷新数据源this.dataGridView1.DataSource = null; 然后尝试这种方法:

假设您正在使用数据集DataSet或本地数据库。 每次将dataGridView与新数据源绑定之前,请创建未绑定的列,这些列的名称应与数据源的名称相同。 创建它们之后,您应该隐藏它们,因为刷新dataGridView的数据源时将需要它们。 下面的示例代码知道数据源列的名称,因此它们是硬编码的,但是如果有必要,您可以每次遍历数据源并创建未绑定列的新集合。

    private void Form1_Load(object sender, EventArgs e)
    {
        this.dataGridView1.DataSource = GetDataSet();
        this.dataGridView1.DataMember = "Students";
        this.dataGridView1.Columns.Add("unboundColumn1", "ID");
        this.dataGridView1.Columns.Add("unboundColumn2", "Name");
        this.dataGridView1.Columns["unboundColumn1"].Visible = false;
        this.dataGridView1.Columns["unboundColumn2"].Visible = false;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.dataGridView1.Columns["unboundColumn1"].Visible = true;
        this.dataGridView1.Columns["unboundColumn2"].Visible = true;
        this.dataGridView1.DataSource = null;
    }

    private DataSet GetDataSet()
    {
        DataSet dataSet = new DataSet();
        dataSet.Tables.Add("Students");
        dataSet.Tables["Students"].Columns.Add("ID", typeof(int));
        dataSet.Tables["Students"].Columns.Add("Name", typeof(string));
        dataSet.Tables["Students"].Rows.Add(1, "John Joy");
        dataSet.Tables["Students"].Rows.Add(2, "Ivan Nova");
        dataSet.Tables["Students"].Rows.Add(3, "Michael German");
        return dataSet;
    }

奋斗了24小时。 不知道为什么它能工作,但是没有对我产生运行时错误的解决方案是处置与datagridview关联的表适配器:

if (this.dataTableTableAdapter != null) 
{
    this.dataTableTableAdapter.Dispose();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM