2011-06-23 15 views
1

これは私がやろうとしていることです。 、私は、その後のDataGridViewにDataTableをバインドを持っているし、問題があるtable.Nowの内容を表示データベースの情報をCでロードする#

OleDbCommand command; 
command = new OleDbCommand("SELECT " + Student.ID + " FROM " + newStudent.DataFile, conn); 
conn.Open(); 
dt.Load(command.ExecuteReader()); 
conn.Close(); 

私はに追加するより多くの情報を持っている:私は、コードを使用してから読んでいたデータベースを持っていますデータベースにないdatatable dt。たとえば、データファイルには見つかりませんが、ユーザーによって入力され、生徒用オブジェクトのプロパティに格納されているGradeという生徒用のフィールドがあります。

クエリ結果をデータテーブルに読み込むのではなく、別の方法でデータテーブルの行と列を手動で作成してからリストの内容を追加することができます(IDを含む)生徒オブジェクト内の等級情報を手動で入力しますか?

答えて

0

あなたは空想、1つ@Basなど本格的なORMフレームワークのために行くしない場合

は、DataTableのデータビューの上から入手ToTable方法を見てみましょう...示唆しています。

List<Long> myList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().ToList() 
myList.Add(1234) 
//etc 

また、あなたが第二データテーブルに追加したい追加のデータをロードすることができ、かつDataTable.Merge Method

EDITを使用します:あなたは、単にDataTable.DefaultView使用してDataTableのためのDataViewを取得することができますアカウントに列を追加したい場合は、上記のリスト提案を次のように変更することができます。

// Create a class to hold the information you want to bind, 
// you could use anonymous types if preferred 
class MyDataRow 
{ 
    public long ID { get; set; } 
    public string AnotherColumn { get; set; } 
    public string AndAnotherColumn { get; set; } 
} 

// then later on when creating that list use something along the lines of: 
List<MyDataRow> myList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().Select(x => new MyDataRow { ID = x.ID }).ToList() 
// you now have a list of MyDataRow which you can work with 
// for example... 
if (myList.Any()) 
    myList.First().AnotherColumn = "foo"; 

// as an exmaple of using an anoymous type (not my preference, but an option nonetheless) 
var anonymousList = dt.DefaultDataView.ToTable(True, "ID").AsEnumerable().Select(x => new { ID = x.ID, whateverYouWantToCallIt = "some other data but this is read only property" }).ToList() 
// you can work with the anonymous list in much the same way, it just isn't explicitly declared 
// and the properties are Read Only 
if (anonymousList.Any()) 
    Console.WriteLine(anonymousList.First().whateverYouWantToCallIt); 
+0

とにかくdatatableを忘れて、データベースから情報を取得する際に構造体のような他のリストを使用することは知っていますか? – Greg

+0

偶然、私の最後の編集は私が思うその最後のコメントであなたを助けるはずですか? - 文法が多少ずれていて、C#が錆びているとお詫び申し上げます。 – Smudge202

+0

"MyDataRow"クラスではなく、匿名タイプを使用することを示すためにいくつかの行を追加しました。 – Smudge202

0

Entity Frameworkを使用して、データベースからオブジェクトモデルを抽出できます。その後、これらのオブジェクトがpartialクラスで作成されているため、オブジェクトにグレードのプロパティを追加できます。これにより、(非常に)より構造化された/使いやすい方法でカスタムロジックと属性をデータ構造に追加できます。

従来のADO.NETと同様に、GUIコンポーネントをエンティティフレームワークオブジェクトにバインドすることができます。

+0

もっとオブジェクトを作成したくありません。私は単純なデータ構造で作業する必要があります – Greg

+0

場合によっては構造を単純化する方法があります。 – Bas

+0

@Gregがデータベースへのアクセスを必要とするのはStudent Idを取得する唯一の時間です(OPでの取得時に別のソースから追​​加する必要がある結果が_might_で示されるため)Entity Frameworkのようなものの学習曲線は一番上ですグレッグがこれを拡大する予定であることをお勧めします。 – Smudge202

関連する問題