如何从另一个表单访问datagrid

时间:2016-12-28 17:58:14

标签: c# user-interface

我正在尝试从另一个Program.cs文件中访问datagridview1 datagridview1在form1中,但它总是给我一个错误 Form1不包含datagridview1

的定义
  

非静态字段,方法或属性需要对象引用' Form1.dataGridView1'

foreach (string i in AllCourses.Keys)
{
    if (TmpStd.coursesF.Contains(i) || TmpStd.coursesIP.Contains(i))
    {
        continue;
    }
    if (AllCourses[i].prerequired_courses == "None")
    {
        Form1.dataGridView1.Rows.Add(i, AllCourses[i].name);
    }
}

3 个答案:

答案 0 :(得分:0)

您需要先声明Form1。试试这个:

Form1 datagridForm = new Form1()

foreach (string i in AllCourses.Keys)
{
    if (TmpStd.coursesF.Contains(i) || TmpStd.coursesIP.Contains(i))
    {
        continue;
    }
    if (AllCourses[i].prerequired_courses == "None")
    {

    datagridForm.dataGridView1.Rows.Add(i, AllCourses[i].name);
    }
}

请注意,根据您的整体实现,您可能需要以不同方式声明Form1变量或将其作为整体函数的一部分传递。

答案 1 :(得分:0)

最有可能dataGridView1是私有的,因此您无法从表单外部访问它。如果是这种情况,请在form1中创建一个如下属性:

public DataGridView DataGridView1 { get { return this.data1ridview1; }}

另外,我会将datagridview称为更有意义的名称,而不是datagridview1,例如dataGridViewStudents或其他有意义的名称。

然后,您可以使用DataGridView1所在的类的实例来访问它。Form1是一个类,但这不是该类的实例。因此,如果表单是这样创建的:

Form1 myForm = new Form1();

然后'myForm'是类Form1的一个实例。然后我可以像这样访问datagridview:

var grid = myForm.DataGridView1;

答案 2 :(得分:0)

由于您尝试从Program.cs类访问DataGridView,因此您遇到了设计问题。

无论如何,如果你仍然想这样做,你必须将DataGridView的Visibility属性更改为'Public',然后你就可以按照你想要的方式访问它。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>

    // I didn´t declare all you need

    [STAThread]
    static void Main()
    {
        Form1 yourForm = new Form1();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(yourForm);

         foreach (string i in AllCourses.Keys)
        {
            if (TmpStd.coursesF.Contains(i) || TmpStd.coursesIP.Contains(i))
            {
                continue;
            }
            if (AllCourses[i].prerequired_courses == "None")
            {

                yourForm.dataGridView1.Rows.Add(i, AllCourses[i].name);
            }
         }
    }
}