This is exactly what i'm attempting to do. I've got a database that i'm reading through by using the code:

OleDbCommand command;
command = new OleDbCommand("SELECT " + Student.ID + " FROM " + newStudent.DataFile, conn);

Then i possess the datatable bind to some datagridview and display the contents on the table.The issue is, i've more details to increase the datatable dt that's not within the database. For instance, i've got a area for that student object known as Grade that's not based in the datafile but joined in through the user and saved inside a property for that student object.

Rather than loading the query result right into a datatable, it is possible to method to load it into a listing in order to by hand create rows and posts for any datatable in permanently after which add the items in their email list(that contains id) and also the grade information within the student object by hand?

You could utilize Entity Framework to extract an item model out of your database. Later on you could include the home for grade for your object (because of the truth that these objects are produced in partial classes). This gives a (greatly) more structured / simple to use method of adding custom logic and characteristics for your data structure.

You are able to bind your GUI components to entity framework objects similarly while you would using conventional ADO.Internet.

If you do not fancy taking a real ORM framework like the one @Bas has recommended...

Have a look in the ToTable method offered by on the Datatable's Dataview. You will get the DataView for the Datatable simply using DataTable.DefaultView:

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

Alternatively, you are able to load the extra data you need to append right into a second datatable, and employ the DataTable.Merge Method

EDIT: To take into account attempting to add more posts, you are able to alter the above list suggestion the following:

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