c#clear datagridview绑定到datasource

时间:2015-01-28 06:19:49

标签: c# winforms datagridview

我有一个绑定到数据源的datagridview,所有标题都添加到了具有datapropertyname集的columns集合中。

当我使用

清除datagridview时
DataGridView1.DataSource = null;

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

4 个答案:

答案 0 :(得分:3)

您可以使用此

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

答案 1 :(得分:0)

处理此问题的方法之一是使用集合作为数据源

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

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

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

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

将其设置为datagridview的数据源。

dataGridView1.DataSource = studentDetail;

清算数据源

要清除Grid的数据源,只需创建一个空的Student列表并再次将其设置为数据源。设置时,每个列的标题都将保留。

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

答案 2 :(得分:0)

如果您不想使用对象集合并仍使用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;
    }

答案 3 :(得分:0)

苦苦挣扎24小时。不知道它为什么会起作用,但是对我来说没有产生运行时错误的解决方案是处理与datagridview关联的表适配器:

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