我希望从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());
}
}
}
答案 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);
}