检索DataTable的所有行到List的问题

时间:2014-06-01 00:17:13

标签: c# sql-server list datatable ado.net

我希望从DataTable中检索数据到List我已经使用了两种方法

第一个是:

SqlDataAdapter dataadapter;
        DataSet dataset = new DataSet();
        public List<Groupe> displayGrp()
        {
            DataTable data = new DataTable();

            Requete = "select * from Groupe ";
            dataadapter = new SqlDataAdapter(Requete, cnx.cnx);
            dataadapter.Fill(dataset, "TGroupe");
         data = dataset.Tables["TGroupe"];

         for (int i = 0; i <data.Rows.Count; i++)
         {
             Program.listgrp[i].Codegroupe = int.Parse(data.Rows[i][0].ToString());
             Program.listgrp[i].Nom = data.Rows[i][1].ToString();
             Program.listgrp[i].Année = int.Parse(data.Rows[i][2].ToString());


         }

         return Program.listgrp;
        }

但是当我尝试调用此方法时出现错误,错误是:

指数超出范围。它不能是负数,必须小于集合的大小。 参数名称:index

但是当我使用这样的foreach方法时:

 SqlDataAdapter dataadapter;
        DataSet dataset = new DataSet();
        public List<Groupe> displayGrp()
        {
            DataTable data = new DataTable();

            Requete = "select * from Groupe ";
            dataadapter = new SqlDataAdapter(Requete, cnx.cnx);
            dataadapter.Fill(dataset, "TGroupe");
         data = dataset.Tables["TGroupe"];
         foreach (DataRow row in data.Rows)
         {
             Program.listgrp.Add(new Groupe { Nom = (row["Nom"].ToString()), Codegroupe = int.Parse(row["Codegroupe"].ToString())
                 , Année = int.Parse(row["Année"].ToString()) });
         }


         return Program.listgrp;
        }

一切都很好我想知道为什么第一个方法没有成功的问题在哪里

课程类别:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Gestion_stagiaire
{
    static class Program
    {
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        /// 
        public static List<Groupe> listgrp = new List<Groupe>();
        public static List<Stagiaire> liststagiaire = new List<Stagiaire>();
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您尝试按索引分配到列表,但没有证据表明您的列表中有任何项目,因此分配必然会失败。

当您尝试分配到listgrp[i]时,没有listgrp[i] 。您需要实例化一个新的Groupe并将其添加到列表中。

for (int i = 0; i <data.Rows.Count; i++)
{
    // Create a new Groupe
    var item = new Groupe();

    // Set the properties
    item.Codegroupe = int.Parse(data.Rows[i][0].ToString());
    item.Nom = data.Rows[i][1].ToString();
    item.Année = int.Parse(data.Rows[i][2].ToString());

    // Add it to the list.
    listgrp.Add(item);
}