2016-12-28 90 views
-1

我試圖從另一個文件是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); 
    } 
} 
+0

Form1不是一個實例,這是問題所在。 Google類別定義與實例之間的區別 – bamanow

回答

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); 
      } 
     } 
    } 
} 
+0

不要公開它,因爲任何人都可以將datagridview設置爲來自外部的其他東西。 – CodingYoshi

+0

我知道,這就是爲什麼我說這可能是設計'不好的做法' – NicoRiff

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變量或將它作爲整體功能的一部分。

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;