我正在使用C#和SQL Server中的一个小项目,我无法找到一种方法来清除DataGridView中的单元格,以便新数据可以填充单元格。我正在使用诸如列中的值之类的参数来加载数据。例如,我想为某个作者加载所有书籍,然后我想为另一个作者加载所有书籍。由于没有清除DataGridView,第二个作者的书籍只是加载到以前数据的行下面,它会像这样继续。
我希望能够在加载新数据之前清除DataGridView,这样当我点击所谓的“加载数据”按钮时,它就是我看到的唯一数据。
目前,这是我的代码或多或少的样子:
SqlConnection connect;
DataSet ds1 = new DataSet();
SqlDataAdapter da;
connect = new SqlConnection();
connect.ConnectionString = "Data Source=THEPC-PC\\SQLExpress;Initial Catalog=TheDatabase;Integrated Security=True";
string sql = "Select * from table WHERE author = 'BookAuthor'";
da = new SqlDataAdapter(sql, connect);
da.Fill(ds1, "table");
table_dataGridView.AutoGenerateColumns = false;
table_dataGridView.DataSource = ds1.Tables["table"];
connect.Open();
connect.Close();
如果我点击了author1的“加载数据”,然后是author2,再为author1再次点击了DataGridView的外观的简化版本:
------------------------
| author1 | bookONE |
------------------------
| author1 | bookTWO |
------------------------
| author2 | bookA |
------------------------
| author1 | bookONE |
------------------------
| author1 | bookTWO |
------------------------
我是否可以在查询之前添加一段代码来删除DataGridView中的所有先前数据?
答案 0 :(得分:5)
在添加新行之前,您是否尝试过table_dataGridView.DataSource = null
和table_dataGridView.Rows.Clear()
?
由于您的table_dataGridView
绑定到DataSource,因此应删除用于删除现有行的正确代码;
if (table_dataGridView.DataSource != null)
{
table_dataGridView.DataSource = null;
}
else
{
table_dataGridView.Rows.Clear();
}
答案 1 :(得分:4)
答案 2 :(得分:2)
这对我有用
cl.OpenCon();
String data = "select ID,Name,Price from Items";
SqlCommand ncmd = new SqlCommand(data);
ncmd.Connection = cl.ReturnCon();
SqlDataReader rs = ncmd.ExecuteReader();
dt = new DataTable();
dt.Load(rs);
GridView1.DataSource = dt;
GridView1.DataBind();
cl.CloseCon();
protected void Clear_Click1(object sender,EventArgs e) { dt.Clear(); GridView1.DataSource = dt; GridView1.DataBind(); }
答案 3 :(得分:1)
为什么不尝试将DataSource设置为null,如table_dataGridView.DataSource = null
答案 4 :(得分:1)
您提供的代码应删除DataGridView
中的先前数据,并将其替换为新数据
问题可能是您将行追加到DataTable
。你能检查ds1.Tables["table"]
是否只包含你需要的数据吗?
答案 5 :(得分:0)
关于事件点击添加
BindingSource.AddNew();