0

私は整数リストを持っています:

    List<int> AllowedLinks = new List<int>();

私はintegerIdsを含むデータテーブルを持っています..反復を通じてこれらをこのリストに入れようとしていますが、エラーが発生します:入力文字列が正しい形式ではありません..

// GetDataTableは、データテーブルを返す関数です

私のコード:

        DataObj = new DAL();
        DataTable dt
    dt = DataObj.GetDataTable("GetAllowedLinksForUserRole",1);
    foreach (DataRow myRow in dt.Rows)
    {
        AllowedLinks.Add(Convert.ToInt32((myRow).ToString()));
    }

後で操作するために整数が必要になるため、リストをデータ行タイプにしたくありません。

4

2 に答える 2

1


IDがデータ行にある列にインデックスを付ける必要があります。コードのリビジョンでは、varxをプレースホルダーとして使用しています。
整数値を含むデータテーブルの列のインデックスを設定する必要があります。
より良いのは、その名前を使用することもできます

DataObj = new DAL(); 
DataTable dt 
int x = 0; // <= here 0 is the index of the column with the IDs 
int name = "ID"; // <= here ID is the name of the column with the IDs
dt = DataObj.GetDataTable("GetAllowedLinksForUserRole",1); 
foreach (DataRow myRow in dt.Rows) 
{ 
    AllowedLinks.Add(Convert.ToInt32(myRow[x])); 
    // This is to use column name
    // AllowedLinks.Add(Convert.ToInt32(myRow[name])); 
} 

注:上記のコードは、整数列にNULL値が含まれていないことを前提としています。
そうでない場合は、列の値を整数に変換する前にテストが必要です。

    AllowedLinks.Add(Convert.ToInt32(myRow[x] == DBNull.Value ? 0 : myRow[x])); 
于 2012-07-23T09:08:02.250 に答える
1

クイックウォッチをチェックインします。行myRowに関連付けられたプロパティ/インデックスが必要です。次のようにデータ行に直接アクセスすることはできませんConvert.ToInt32((myRow).ToString())

代わりに、経由でアクセスする必要があります

Convert.ToInt32((myRow.propertyname).ToString())

またConvert.ToInt32((myRow[incrementedindex]).ToString())

于 2012-07-23T09:49:01.750 に答える