我正在尝试使用OleDbDataReader从MS Access 2010中的表中检索记录。在某些情况下,我从中检索记录的表具有所提供查询的多个记录。例如:两张桌子; Ist表有两列 - 一列是Name(主键),另一列是数字。第二个表包含许多字段;一个是Name字段作为外键。在某些情况下,我的查询匹配两个表中返回一条记录的记录,但在其他情况下,第一个表中有一条记录,但第二条表中有许多记录。所以我的datareader只会输入填充文本框的记录之一。所以我想找到一种方法将这些多个记录放入列表框中,我在这个论坛上问了一个问题。给出的答案是使用LINQ并“将结果放入List / IEnumerable”。我希望就是那么简单。我已经尝试合并List / IEnumerable而且我不仅要倒退,而且变得越来越困惑。我的理解是我必须创建一个全新的类,构造函数,方法集等,并创建一个将采用任何类型(int,string等)的列表。它是否正确?我的新课程是否以
开头public class myList : IEnumerable<T>
{
public IEnumerable<T> GetEnumerator()
{
foreach (object o in objects)
{
yield return 0;
}
}
}
Form类的内部方法
while (myreader.Read())
{
foreach (object o in myList) //do something
}
T是任何类型,否则我会使用int或string?
答案 0 :(得分:0)
这有点令人困惑...... 所以,基本上你的表中有一个父子关系。 我有一个非常similar tutorial,希望能解决你的问题。 这就是如何读取数据
ArrayList rowList = new ArrayList();
SqlDataReader reader = storedProcCommand.ExecuteReader();
while (reader.Read())
{
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
rowList.Add(values);
}
这就是将值添加到ListView
的方式orderDetailsList.Items.Clear();
foreach (object[] row in rowList)
{
string[] orderDetails = new string[row.Length];
int columnIndex = 0;
foreach (object column in row)
{
orderDetails[columnIndex++] = Convert.ToString(column);
}
ListViewItem newItem = new ListViewItem (orderDetails);
orderDetailsList.Items.Add (newItem);
}
输出是这样的......
答案 1 :(得分:0)
如果我理解你的话,你是想从一个表中获取所有记录(我称之为Table2),其中名称与另一个表中的一个记录上的名称相匹配(表1)?我使用LINQ和SQL数据库做了很多。
我假设您已经拥有与数据库的连接。您是否创建了一种从Table1中检索所需记录的方法?如果是这样,你已经拥有了这个名字。所以我会创建另一种方法:
public List<Table2> GetList(string name)
{
List<Table2> list = new List<Table2>();
list = db.Table2.Where(q => q.NameField = name).ToList();
return list;
}
然后,您可以在填充控件时调用此方法,并将列表数据绑定到您要显示列表的任何控件中。所以像这样:
List<Table2> list = new List<Table2>();
list = GetList("This is the name from the Table1 data");
listviewcontrol.DataSource = list;
根据您使用的控件,使用数据填充控件的方法略有不同。编辑:Rwiti有一些很好的代码用于将数据添加到列表视图。
如果您只想显示Table2记录列表中的部分数据(例如,填充组合框的位置字段),我建议如下:
List<string> locations = new List<string>();
foreach (Table2 record in list)
{
locations.Add(record.Location);
}
comboBox1.DataSource = locations;