0

一个愚蠢的问题。我有三个班。DataTableManager 类是一种全局类。

public  class DataTableManager
{
    public DataTable dt1 { get; set; }
    public List<object> SchoolInfo { get; set; }
    public string ApplicationName {get;set;}
    public int number;
}

在公共类 DataCreate 中,我想向对象添加不同类型的变量,然后我们可以在另一个公共类摘要中获取它们。我的问题是我不熟悉不同类型变量的对象集合。

例如,在

public class DataCreate 
{

   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int ID { get; set; }
   public GradeLevel Year;
}

我想将它们添加到 SchoolInfo。假设它们来自文本框。不知道该怎么做?

以及如何在我的第三课摘要中检索它?

谢谢。

更新:

DataTableManager 对象是一个包含所有表单信息的全局对象。在每个表格中我们要设置对象并由DataTableManager 对象持有。然后最后我想以最后一种形式获得它们。我想要的是每个表单都有一个对象来保存所有变量,尽管它们有不同的类型。

4

2 回答 2

1

要创建一个新DataCreate对象并将其添加到DataTableManager对象SchoolInfo列表中,您需要执行以下操作:

DataTableManager manager = new DataTableManager();
DataCreate data = new DataCreate();
data.LastName = TextBox1.Text;
data.ID = TextBox2.Text;
manager.SchoolInfo.Add(data);

但是,我应该指出,将其声明SchoolInfo为一种List<Object>属性是一种不好的做法。将其声明为List<DataCreate>.

要将 DataCreate 对象从 DataCreate 对象本身添加到列表中,您需要执行以下操作:

manager.SchoolInfo.Add(this);

DataTableManager 不是一个对象,它是一种类型。您必须实例化它才能创建一个对象(就像我调用 时所做的那样new DataTableManager)。或者,您可以将其设为静态类,这样就没有需要实例化的对象,并且您可以通过其类型名称(例如DataTableManager.SchoolInfo.Add(...))直接访问它的成员,但这不是您当前定义它的方式。

但是,我完全不建议按照您的方式做事。拥有全局变量从来都不是一个好主意。相反,如果表单需要访问 DataTableManager 对象,它应该请求它(通过将一个传递给表单上的构造函数的参数,或者通过在表单上设置公共属性,或者通过调用某种窗体上的公共初始化方法)。您必须在某处显示这些 DataCreate 表单的代码。正是该代码所在的类应该实例化管理器并将其提供给表单。

但是,通常您不希望存储对所有表单的引用。通常,您只想存储输入的数据。为此,您需要创建一个没有功能的新类,只是数据的公共属性。然后让表单返回其中一个对象,然后让中心类显示表单,获取返回的数据并将其添加到管理器。

例如:

public class DataManager
{
    public List<StudentData> Students { get; set; }
    // etc.
}

public class StudentData
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    // etc.
}

public class StudentEntryDialog : Form
{
    public StudentData StudentData { get; set; }

    // ... code to call storeData method when user chooses to do so ...

    private void storeData()
    {
        StudentData = new StudentData();
        StudentData.FirstName = TextBox1.Text;
        StudentData.LastName = TextBox2.Text;
        // etc.
    }
}

public class CentralCodeOfSomeSort
{
    private DataManager manager = new DataManager();

    private showStudentEntry()
    {
        StudentEntryDialog dialog = new StudentEntryDialog();
        dialog.ShowDialog();
        if (dialog.StudentData != null)
            manager.Students.Add(dialog.StudentData);
    }
}
于 2012-05-24T20:09:40.130 回答
1

我不确定你想要什么。只是猜测。为学生创建一个班级

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
    ...
}

并将您的列表定义为

public List<Student> SchoolInfo { get; set; }

现在您可以将学生添加到列表中

 var manager = new DataTableManager(); 
 var student = new Student {
     FirstName = firstNameTextBox.Text;
     LastName = lastNameTextBox.Text;
     ID = Int32.Parse(IdTextBox.Text);
 };
 manager.SchoolInfo.Add(student);  

您可以使用(例如)查询列表

var query = manager.SchoolInfo
    .Where(s => s.LastName.StartsWith("A")
    .OrderBy(s => s.LastName)
    .ThenBy(s => s.FirstName)
于 2012-05-24T20:18:54.737 回答