2014-12-23 3 views
1

ниже мой кодсохранить данные в гнездовом forloop в C#

string Cmp_Cd_Typ_Id1_1 = ""; 
for (a = 0; a < dsDeviceMatch2.Tables[0].Columns.Count; a++) 
{ 
    for (b = 0; b < dsDeviceMatch2.Tables[0].Columns.Count; b++) 
    { 
     Cmp_Cd_Typ_Id1_1 = Cmp_Cd_Typ_Id1_1 + dsDeviceMatch2.Tables[0].Rows[a][b].ToString() + ","; 
    } 
} 

копит данные в переменной Cmp_Cd_Typ_Id1_1. Мне нужно сохранять данные каждой итерации отдельно, но здесь я получаю результат как a, b, c, d. но мне нужно сохранить отдельно б отдельно и т.д. Как я могу добиться этого

+0

Что содержание 'DataTable'? Вы можете сохранить переменные в 'List'. – Sybren

+0

Что вы пытаетесь сделать? Строковая переменная может содержать одну строку, а не несколько строк. Если вы хотите извлечь несколько строк, используйте List. Если вы расскажете о своей * актуальной * проблеме, вам будет легче помочь. Вы пытаетесь извлечь каждую строку как строку, разделенную запятой? Вы пытаетесь создать файл CSV? Вы хотите получить значения определенного столбца? –

+0

использовать строковый массив вместо строковой переменной, например string [] Cmp_Cd_Typ_Id1_1 = new string []; int i = 0; для (а = 0; а

ответ

2

Индексатор a следует применять к коллекции Rows, а не к коллекции Columns

for (a = 0; a < dsDeviceMatch2.Tables[0].Rows.Count; a++) 

Также настоятельно рекомендуется использовать StringBuilder вместо конкатенации строк, как этот

StringBuilder result = new StringBuilder(); 
for (int a = 0; a < dsDeviceMatch2.Tables[0].Rows.Count; a++) 
{ 
    for (int b = 0; b < dsDeviceMatch2.Tables[0].Columns.Count; b++) 
    { 
     result.Append(dsDeviceMatch2.Tables[0].Rows[a][b].ToString() + ","); 
    } 
} 
string Cmp_Cd_Typ_Id1_1 = result.ToString(); 

вместо этого, если вы хотите строк, отделенных друг от друга, то вам необходимо добавить в таком подходе List<strings>

// Each row will be an element of this list 
List<string> rows = new List<string>(); 

for (int a = 0; a < dsDeviceMatch2.Tables[0].Rows.Count; a++) 
{ 
    StringBuilder result = new StringBuilder(); 
    for (int b = 0; b < dsDeviceMatch2.Tables[0].Columns.Count; b++) 
    { 
     result.Append(dsDeviceMatch2.Tables[0].Rows[a][b].ToString() + ","); 
    } 
    // Add the row to the list removing the last comma 
    rows.Add(result.ToString(0, result_1.Length - 1); 
} 
+1

String.Join on Rows будет работать так же хорошо, и в результате получится более чистый код –

1

Вы конкатенации значения на той же строке, вы можете использовать массив строк или список для хранения значений, например:

List<string> Cmp_Cd_Typ_Id1_1 = new List<string>; 
for (a = 0; a < dsDeviceMatch2.Tables[0].Columns.Count; a++) 
{ 
    for (b = 0; b < dsDeviceMatch2.Tables[0].Columns.Count; b++) 
    { 
     Cmp_Cd_Typ_Id1_1.Add(dsDeviceMatch2.Tables[0].Rows[a][b].ToString()); 
    } 
} 
Смежные вопросы