2017-10-04 60 views
0

我使用它從DataReader的讀取數據,並添加列表中的一個對象列表類型爲項目分配值。 下面是相同的代碼:添加項目,然後在列表

public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader, int dataLimit) 
{ 
     List<object[]> dataList = new List<object[]>(); 
     while (reader.Read()) 
     { 
      object[] columnName = new object[reader.FieldCount]; 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       columnName[i] = reader.GetName(i); 
      } 
      dataList = new List<object[]>{columnName}; 
      object[] tempRow = new object[reader.FieldCount]; 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       tempRow[i] = reader[i]; 
      } 

      dataList.Add(tempRow); 
     } 
     return dataList; 
    } 

正如你可以看到上面的代碼先運行一個for循環得到所有列在列表中指定類似下面的圖像。 List with column name image

然後運行一個多回路獲得的價值,並試圖指派爲相同的列名,但後添加tempRow列表顯示兩個項目計算,所有的列名,並與所有的值第二項第一項。 以下是爲所有值添加的圖像。 List with added values

我如何在列表中選擇特定的列索引值分配? 請讓我知道如果你有任何問題。

+0

的'while'是遍歷每個記錄在第一循環讀者。在那裏,你隨時添加所有列名 –

+0

@TimSchmelter,能否請你指正我在做什麼錯在那裏? –

回答

0

似乎要列名添加爲「頭」,在while循環一次,並非總是如此。 你總是在改寫記錄中環的整個列表:

dataList = new List<object[]>{columnName}; 

我認爲你可以使用這種方法:

public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader) 
{ 
    List<object[]> dataList = new List<object[]>(); 

    if (reader.HasRows) 
    { 
     // add header first and just once 
     string[] columns = Enumerable.Range(0, reader.FieldCount) 
      .Select(reader.GetName) 
      .ToArray(); 
     dataList.Add(columns); 
    } 

    while (reader.Read()) 
    { 
     // add data records 
     object[] tempRow = new object[reader.FieldCount]; 
     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      tempRow[i] = reader[i]; 
     } 
     dataList.Add(tempRow); 
    } 
    return dataList; 
} 
+0

我已經檢查給定的代碼但是我就是在DataList控件添加temprow後看到我有兩個項目計數。一個是字段的字符串數量,另一個是對象數量的值。我需要在這裏爲每個專欄項目也應該有它們的價值。就像我們如何使用List userDetailsList = new List ();其中Report_UserDetails對象我們有適當的名字。當爲此列表值添加值時,將爲特定屬性設置值。希望你明白我想說什麼。 –

相關問題