Это также просто на C#. Вам просто нужен экземпляр Form1
, а затем вы можете вызвать этот метод в этом экземпляре.
Однако есть лучший подход. Этот код фактически не принадлежит на форме. Формы предназначены для взаимодействия с пользовательским интерфейсом, а не для бизнес-логики и доступа к данным. Вам лучше переместить этот код в общее место, к которому будут доступны обе формы.
Создайте класс доступа к данным. Что-то вроде этого:
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
, который означает, что он не нужен экземпляр будет называться. (Это как Shared
ключевое слово в VB.) Так что ваши формы могут просто позвонить:
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
и т.д. (Come думать это, возможно, потребует нескольких имен, для чего вам нужно иметь больше имен. Обычно вам требуется небольшое количество имен для переменных переменных. Такие вещи, как Form1
или myView1
, не очень хорошо переносят намерения.)
У вас есть переменная типа 'Form1' где-нибудь? Это примерно то же самое в C# и VB.Net. – Botz3000
Это драгоценный камень! В сочетании с вашим вопросом это лучший пример для смешения уровня представления и той бизнес-логики, которую я видел в течение длительного времени. Чтобы дать вам правильный ответ: почему бы вам не поместить код поиска данных в свой собственный класс? В этом случае обе формы могут использовать его без кросс-зависимостей, которые вы собираетесь ввести. –
@Thorsten Dittmar: но, кроме того, что это за жемчужина, как вы просто выполняете то, что я спросил? ---- просто предположим, что это для быстрой демонстрации, и код будет реорганизован !! – StackTrace