C# DataGridViewColumnCollection因未知原因重置

C# DataGridViewColumnCollection因未知原因重置,c#,winforms,C#,Winforms,我已经设置了一个DataGridViewColumnCollection,如下所示: private DataGridViewColumnCollection columns; private void RemoveStaffFromList(object sender, EventArgs e) { columns = dataGridViewStaff.Columns; MessageBox.Show(columns.Count.ToStri

我已经设置了一个
DataGridViewColumnCollection
,如下所示:

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());
    }

MessageBox 1返回“4”,MessageBox 2返回“0”,因此当我清空数据源时,
columns
显然会重置。但是为什么呢?
columns
不应该被视为一个独立于
dataGridViewStaff
的变量,因此不受数据源更改的影响吗?

因为您的
columns
变量只指向与
dataGridViewStaff.columns
相同的内存位置,所以当您将数据源设置为
null
变为空,因此为0

不要忘记将false指定给

获取或设置一个值,该值指示是否创建列 设置数据源或数据成员属性时自动执行


当此属性设置为true并且设置或更改了DataSource或DataMember属性时,将自动生成列。

Nope。使用数据源时,数据以及列和类型都来自该数据源。不确定您正在使用
DataGridViewColumnCollection
做什么,但看起来您正在从两个不同的东西打印列计数。那么,有没有办法强制它将值存储在单独的内存位置?@PeterWritesCode,我想这会很麻烦,您需要创建一个全新的
DataGridView
var columns=newdatagridviewcolumncollection(newdatagridview())DataGridView
没有内置这种克隆方法是有原因的。