-2

我正在尝试使用 OleDbDataReader 从 MS Access 2010 中的表中检索记录。在某些情况下,我从中检索记录的表具有所提供查询的多条记录。例如:两张表;Ist 表有两列 - 一列是名称(主键),另一列包含数字。第二张表包含许多字段;一个是名称字段作为外键。在某些情况下,我的查询匹配在两个表中都返回一条记录的记录,但在其他情况下,第一张表中有一条记录,但第二张表中有许多记录。所以我的数据阅读器只提取填充文本框的那些记录之一。所以我想找到一种方法把这些多条记录放到一个列表框中,我在这个论坛上问了这个问题。给出的答案是使用 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?

4

2 回答 2

0

如果我理解正确,您希望从一个表(我称之为 Table2)中获取名称与另一表(Table1)中一条记录上的名称匹配的所有记录?我经常这样做,使用 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;
于 2013-07-26T15:14:59.233 回答
0

这有点令人困惑......所以,基本上你的表中有一个父子关系。我有一个非常相似的教程,希望能解决你的问题。这就是读取数据的方式

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);
}

输出是这样的...... 在此处输入图像描述

于 2013-07-26T15:11:56.290 回答