4

C#で変換DataTableしたい。List<object>これが私のコードです。しかし、それは機能していません。私を助けてください

public List<object> ShowMessage()
{
    List<object> obj = new List<object>();

    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("Name");

    dt.Rows.Add("1","AAA");
    dt.Rows.Add("2", "BBB");
    dt.Rows.Add("3", "CCC");

    foreach (DataRow dr in dt.Rows)
    {
        obj.Add(dr);
    }

    return obj;
}

これはエラーです-

ここに画像の説明を入力してください

4

3 に答える 3

38

リストオブジェクトの型付きデータ型がある場合は、次のようになります

public class MyObj
{
    public string Name { get; set; }
    public int ID { get; set; }
}

その後、あなたはこのようにすることができます

private List<MyObj> test(DataTable dt)
{

    var convertedList = (from rw in dt.AsEnumerable()
        select new MyObj() 
        {
            ID = Convert.ToInt32(rw["ID"]),
            Name = Convert.ToString(rw["Name"])
        }).ToList();

    return convertedList;
}

または、それでも必要List<object>な場合は、このようにします

private List<object> GetListByDataTable(DataTable dt)
{

    var reult = (from rw in dt.AsEnumerable()
        select new
        {
            Name = Convert.ToString(rw["Name"]),
            ID = Convert.ToInt32(rw["ID"])
        }).ToList();

    return reult.ConvertAll<object>(o => (object)o);
}
于 2012-10-11T07:32:33.320 に答える
8

あなたがやろうとしていることは、データテーブル(おそらくクエリから返される)のオブジェクトをリストに挿入することだと思います。

public List<object> ShowMessage2(DataTable dtInput)
    {
        List<object> objectList = new List<object>();

        foreach(DataRow dr in dtInput.Rows)
        {
            MyObj newObj = new MyObj();
            newObj.ID = Convert.ToInt32(dr["ID"]);  // Beware of the possible conversion errors due to type mismatches
            newObj.Name = dr["Name"].ToString();

            objectList.Add(newObj);
        }
        return objectList;
    }

public class MyObj
{
    public int ID { get; set; }
    public string Name { get; set; }        
}

質問への追加を見ただけです!データをグリッドビューで表示するだけの場合、リストを生成しようとする理由がわかりません。これは1行で実行できます!!!

List<object> obj = new List<object>();
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");

dt.Rows.Add("1", "AAA");
dt.Rows.Add("2", "BBB");
dt.Rows.Add("3", "CCC");

dataGridView1.DataSource = dt; // THIS IS ALL U NEED! Just bind the DataTable to the grid as data source!
于 2012-10-11T08:34:23.320 に答える
2

DataRowコレクションに追加する前に、DataRowを作成する必要があります。

例えば、

DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");
        var dr = dt.NewRow();
        dr[0] = "1";
        dr[1] = "AAA";
        dt.Rows.Add(dr);
        ... likewise

        foreach (DataRow dr in dt.Rows)
        {
            obj.Add(dr);
        }

これで、リストに行が保持されます。動作するかどうか教えてください。

于 2012-10-11T07:13:32.593 に答える