2011-06-23 40 views
1

這就是我想要做的。我有我使用的代碼讀取數據庫:從c數據庫加載信息問題#

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

我那麼有數據表結合到一個DataGridView並顯示table.Now問題的內容,我有更多的信息添加到datatable dt不在數據庫中。例如,我有一個名爲Grade的學生對象的字段,該字段在數據文件中找不到,但由用戶輸入並存儲在學生對象的屬性中。

不是將查詢結果加載到數據表中,有沒有辦法將它加載到列表中,這樣我就可以在另一個方法中爲數據表創建行和列,然後添加列表的內容(包含id)以及手動輸入學生對象中的成績信息?

回答

0

如果你不喜歡去一個完全成熟的ORM框架,如一個@Bas曾建議...

看看可以從一個DataTable的數據視圖的ToTable方法。你可以簡單地使用DataTable.DefaultView得到您的DataTable中的數據視圖:

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

或者,您也可以加載要附加到第二個數據表的附加數據,並使用DataTable.Merge Method

編輯:帳戶想要添加額外的列,您可以更改上面的列表建議,如下所示:

// 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

你知道無論如何忘記數據表,並使用其他列表像結構從數據庫中獲取信息? – Greg

+0

巧合的是,我最後一次編輯應該可以幫助您處理我認爲的最後一條評論? - 我很抱歉,如果語法稍微出來,我的C#是生鏽 – Smudge202

+0

我已經更正了明顯的錯字,並添加了幾行來演示使用匿名類型而不是「MyDataRow」類。 – Smudge202

0

您可以使用Entity Framework從數據庫中提取對象模型。之後,您可以將屬性添加到對象中(由於這些對象是在partial類中創建的)。這提供了一個(很大程度上)更加結構化/易於使用的方法,將自定義邏輯和屬性添加到數據結構中。

您可以使用與傳統ADO.NET類似的方式將GUI組件綁定到實體框架對象。

+0

我不想創建更多的對象。我只需要使用簡單的數據結構 – Greg

+0

有時添加一些結構是簡化的方法。 – Bas

+0

如果提取學生ID是@Greg需要訪問數據庫的唯一時間(因爲_might_可能需要在OP中檢索其他來源的附加結果來指示),那麼像Entity Framework之類的學習曲線就會超越頂部,但Greg應該提出一個很好的建議來擴展這一點。 – Smudge202