它在C#中也很簡單。您只需要Form1
的實例,然後您可以在該實例中調用此方法。
但是,還有更好的方法。此代碼實際上並不是所屬的表單上的。表單用於UI交互,而不用於業務邏輯和數據訪問。你最好將這些代碼移到一個可以通過這兩種形式訪問的公共位置。
創建一個數據訪問類。事情是這樣的:
public class StudentRepository
{
public static object GetStudents()
{
using (var DB = new myView1())
{
var studentList = (from s in DB.View123
select new { s.StudentName, s.StudentNumber, s.ClassName, s.StreamName, s.ParentName }).ToList();
dataGridViewStudents.DataSource = students;
return students.ToList();
}
}
}
還要注意方法,現在是static
,這意味着它並不需要一個實例來調用。 (這就好比在VB中Shared
關鍵字)。所以你的形式可以只要致電:
var students = StudentRepository.GetStudents();
你要修復,雖然這是這個問題的範圍之外的另一件事,就是返回類型。 object
不是很具體。你應該有一個Student
類,該方法應該返回IList<Student>
。事情是這樣的:
public class Student
{
public string StudentName { get; set; }
public int StudentNumber { get; set; }
public string ClassName { get; set; }
public string StreamName { get; set; }
public string ParentName { get; set; }
}
和:
public class StudentRepository
{
public static IList<Student> GetStudents()
{
using (var DB = new myView1())
{
var studentList = (from s in DB.View123
select new Student { StudentName = s.StudentName, StudentNumber = s.StudentNumber, ClassName = s.ClassName, StreamName = s.StreamName, ParentName = s.ParentName }).ToList();
dataGridViewStudents.DataSource = students;
return students.ToList();
}
}
}
我對於該類型的字段的一些假設,你應該能夠糾正如果這些他們錯了。如果它不是一個不變的結果(也就是說,如果它只是學生的枚舉而不是要添加到列表中,從中刪除列表等),您甚至可能希望它返回IEnumerable<Student>
而不是IList<Student>
。
還有很多更可以在這裏做的,比如具有其他數據元素,如Class
對象(這可能需要一個不同的名稱,只是要清潔),Parent
,Stream
等(細想它們中的一些可能需要更好的名稱,一般而言,您的變量命名需要一些工作,例如Form1
或myView1
並不能很好地表達意圖。)
您在某處是否有'Form1'類型的變量?它在C#和VB.Net中大致相同。 – Botz3000
這是一顆寶石!結合您的問題,這是混合表示層和我長期見過的業務邏輯的最好例子。給你一個正確的答案:你爲什麼不把數據檢索代碼放到它自己的類中?在這種情況下,這兩種形式都可以在沒有您即將推出的交叉依賴的情況下使用它。 –
@Thorsten Dittmar:除了它的寶石之外,你怎麼簡單地完成我所問的? ----假設這是一個快速演示,代碼將被重構! – StackTrace