Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我必须向表单添加DataGridView才能获取数据?_C#_Forms_Datagridview_Datasource_Rowcount - Fatal编程技术网

C# 为什么我必须向表单添加DataGridView才能获取数据?

C# 为什么我必须向表单添加DataGridView才能获取数据?,c#,forms,datagridview,datasource,rowcount,C#,Forms,Datagridview,Datasource,Rowcount,我必须将datagridview复制到另一个,以便在backgroundworker线程中迭代,创建excel导出 复制是为了允许用户在导出期间对原始datagridview进行一些更改 因此,我创建了一个新的DataGridView(以编程方式),并将原始DataTable的副本放入新DataGridView的DataSource属性中。 但是,我发现如果我不在任何表单的控件(列表)属性中添加datagridview,行数仍然等于0 有人能解释一下吗 注意:DataTable的副本只是一个新的

我必须将datagridview复制到另一个,以便在backgroundworker线程中迭代,创建excel导出

复制是为了允许用户在导出期间对原始datagridview进行一些更改

因此,我创建了一个新的DataGridView(以编程方式),并将原始DataTable的副本放入新DataGridView的DataSource属性中。 但是,我发现如果我不在任何表单的控件(列表)属性中添加datagridview,行数仍然等于0

有人能解释一下吗


注意:DataTable的副本只是一个新的DataTable,其中有copy()列。

这非常简单。当您刚刚创建DataGridView(或任何其他WinForms或Wpf控件)时,它仅在.Net中创建。例如,没有为其创建系统窗口。当控件处于这种状态时,它不会为优化目的应用任何绑定(为什么可视化控件在不可见的情况下要做任何事情?:)。将控件添加到可见窗体时,控件将创建其系统窗口(即初始化其句柄属性),并按预期开始工作。 如果希望使任何可视控件按预期工作,但不真正显示它,只需读取其句柄属性即可。这将强制控件创建系统窗口并完全初始化。 同样对于WPF来说,这有点困难,因为您只能获得窗口控件的句柄,为了获得它,您必须使用以下代码:

public IntPtr GetWpfWindowHandle(Window w)
{
   var interopHelper = new WindowInteropHelper(w);
   return interopHelper.Handle;
}

看看答案。在这种情况下,仅读取句柄不起作用-我需要为网格分配一个BindingContext。

您能否显示定义新的
DataGridView
的代码,设置
数据源
,并在其中检查
行数
。我这里没有代码,但情况是这样的:DataGridView在读取DataTable之前可能正在等待一些窗口消息,对此我不确定。出于这样的原因,.Net中有两个计时器,一个用于窗口窗体,另一个用于独立使用。。。是否需要在DataGridView中执行任何不能使用DataTable(或其视图)的操作?为什么在这里使用UI组件?为什么要在
DataGridView
中使用数据?我这里没有代码,但它是这样的:public DataGridView void Copy(DataTable dt){DataGridView newGV=new DataGridView();newGV.DataSource=dt.Copy();return newGV;}当我监视返回的对象时,我总是得到一个等于0的RowCount值。我不得不说:形式鬼魂形式=新形式();ghostForm.Controls.Add(newGV);在DataSource设置之前,要有行。请注意,这里的问题不是“rowcount”,而是未加载的数据,除非我放入前面的代码…谢谢:)我看到在将DGC附加到表单时设置了BindingContext属性,所以我希望这样。再次感谢你!