这就是我想要做的。我有一个数据库,我正在阅读使用代码:
OleDbCommand command;
command = new OleDbCommand("SELECT " + Student.ID + " FROM " + newStudent.DataFile, conn);
conn.Open();
dt.Load(command.ExecuteReader());
conn.Close();
然后我将datatable绑定到datagridview并显示表的内容。现在问题是,我有更多信息要添加到数据库中不在数据库中的dt。例如,我有一个名为Grade的学生对象的字段,该字段在数据文件中找不到,但是由用户输入并存储在学生对象的属性中。
有没有办法将查询结果加载到数据表中,有没有办法将其加载到列表中,这样我就可以在另一个方法中为数据表手动创建行和列,然后添加列表的内容(包含id)和手动学生对象中的成绩信息?
答案 0 :(得分:0)
您可以使用Entity Framework从数据库中提取对象模型。之后,您可以将等级属性添加到对象中(因为这些对象是在partial类中创建的)。这提供了一种(大大)更加结构化/易于使用的方式,可以将自定义逻辑和属性添加到数据结构中。
您可以使用与使用传统ADO.NET类似的方式将GUI组件绑定到实体框架对象。
答案 1 :(得分:0)
如果你不想寻找一个完整的ORM框架,比如@Bas建议的......
查看Datatable的Dataview上提供的ToTable方法。您只需使用DataTable.DefaultView:
即可获取Datatable的DataViewList<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);