You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataGridViewColumnCollection置空DataSource后莫名重置原因咨询

为什么置空DataGridView的DataSource会导致Columns集合被重置?

首先咱们先看你这段代码:

private DataGridViewColumnCollection columns;
private void RemoveStaffFromList(object sender, EventArgs e)
{
    columns = dataGridViewStaff.Columns;
    MessageBox.Show(columns.Count.ToString());
    dataGridViewStaff.DataSource = null;
    MessageBox.Show(columns.Count.ToString());
}

你疑惑的点在于:columns是个独立变量,为啥置空DataSource后它的Count也跟着变了?其实这里有个关键误解——你并没有拿到一个独立的列集合副本。

dataGridViewStaff.Columns返回的是DataGridView内部维护的列集合的引用,不是一个新的、和原集合断开联系的副本。也就是说,你的columns变量只是“指向”了DataGridView自己管的那个列集合,而不是把这个集合复制了一份存起来。

当你把DataSource设为null时,DataGridView会自动清理所有通过数据源绑定生成的列(毕竟没了数据源,这些列也就失去了存在的依据),这时候它内部的列集合就被清空了。而你的columns变量因为一直指向这个被清空的集合,所以第二次MessageBox自然就返回0了。

如果想要保留原来的列集合不受DataSource变化影响,你需要手动创建一个独立的副本,比如用List来复制:

// 创建一个独立的列列表副本
var columnsCopy = new List<DataGridViewColumn>();
foreach (DataGridViewColumn col in dataGridViewStaff.Columns)
{
    columnsCopy.Add(col);
}

这样之后哪怕DataGridView的Columns被清空,columnsCopy里的内容还是原来的那些列,不会跟着变。

内容的提问来源于stack exchange,提问作者PeterDoesStuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:35:52