一个愚蠢的问题。我有三节课。 类DataTableManager是一种全局类。
public class DataTableManager
{
public DataTable dt1 { get; set; }
public List<object> SchoolInfo { get; set; }
public string ApplicationName {get;set;}
public int number;
}
在公共类DataCreate中,我想向对象添加不同类型的变量,然后我们可以在另一个公共类Summary中获取它们。 我的问题是我不熟悉不同类型变量的对象集合。
例如,在
中public class DataCreate
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public GradeLevel Year;
}
我想将它们添加到SchoolInfo。假设它们来自文本框。不知道怎么做?
如何在我的第三课摘要中检索它?
感谢。
更新:
DataTableManager对象是一个包含所有表单信息的全局对象。在每个表单中我们都要设置对象并由DataTableManager对象保存。最后我想以最后的形式得到它们。我想要的是每个表单都有一个对象来保存所有变量,尽管它们有不同的类型。
答案 0 :(得分: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);
}
}
答案 1 :(得分: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)