我在Windows窗体中有一个gridview。我有checkData.cs
,myNames.cs
个文件。
我划分了一些函数并将这些函数保存在这些.cs文件中。
所有文件都有名称空间myNameSpace
Program.cs文件具有gridview。当我尝试从checkData.cs访问该gridview时,它显示错误为The data dataGridView1 doesnot exist in the current context
。
如何访问网格视图?
namespace myNameSpace
{
class Program : System.Windows.Forms.Form
{
private DataGridView dataGridView1;
}
}
在checkData.cs文件中我试图按如下方式访问该gridview。
namespace myNameSpace
{
public BindToGrid()
{
dataGridView1.dataSource = mySource; //assume that mySource has grid bound data
}
}
答案 0 :(得分:0)
最简单的答案是让checkData.cs
和myNames.cs
文件中的类将DataGridView
作为构造函数参数。类似的东西:
public class CheckData
{
public CheckData(DataGridView Gridview)
{
_gridView = GridView;
}
private readonly DataGridView _gridView;
}
答案 1 :(得分:0)
将DataGridView
作为参数传递给另一个类并存储对它的引用(类是C#中的引用类型,所以它非常直接。)
编辑:编码大猩猩的答案显示了它。
答案 2 :(得分:0)
命名空间在这里并不是非常重要。我不确定checkData.cs和myNames.cs中的类和/或方法是否是静态的,但是您作为子窗体的DataGridView对象是否构成对象。要访问此对象,必须将其传递到要从中访问它的类或方法。一种方法是将它传递给构造函数。另一种方法是在你的班级拥有一个房产。我个人认为让任何需要访问此对象的方法作为参数直接传递会更有用。
或者,如果您正在做的事情影响DataGridView的数据,并且您只是试图将您的逻辑保持在表单本身外部,那么您可以将逻辑放在扩展方法中并直接从内部调用它你的表格。
从表格内部:
using MyExtensions;
...
private void MyMethod()
{
this.DataGridView1.CheckNames();
}
然后使用CheckNames方法(Extensions.cs或其他)创建扩展类:
public static class Extensions
{
public static void CheckNames(this DataGridView source)
{
// Do your logic here.
}
}
我发现扩展方法在分离/重用与特定类绑定的逻辑时非常方便。这是the documentation。