如何从List / IEnumerable中的表添加检索到的记录

时间:2013-07-26 13:22:26

标签: c# sql winforms ms-access

我正在尝试使用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?

2 个答案:

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

输出是这样的...... enter image description here

答案 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;