0

愚かな質問です。私は3つのクラスを持っています。クラス 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に追加したい。それらがテキストボックスからのものであるとします。やり方がわからない?

そして、3 番目のクラスの概要でそれを取得する方法は?

ありがとう。

アップデート:

DataTableManager オブジェクトは、すべてのフォームの情報を保持するグローバルです。各フォームでオブジェクトを設定し、DataTableManager オブジェクトで保持します。それから最終的には、それらを最終的な形で取得したいと考えています。私が望むのは、各フォームにはすべての変数を保持するオブジェクトがありますが、型は異なります。

4

2 に答える 2

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 に答える
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 に答える