2011-06-27 12 views
10

Mam pytanie dotyczące DataRows. Mam DataTable, który następnie przekonwertowałem na listę DataRow. Teraz chcę, aby informacje o łańcuchach były przechowywane w każdym DataRow. Jak mogę to zrobić? To jest mój kod:Uzyskaj wartość dataru w C#

List<DataRow> list = dt.AsEnumerable().ToList(); 
+0

"Teraz chcę, aby informacje o łańcuchach były przechowywane w każdym pliku danych." To trochę zagmatwane. Czy chcesz połączyć wszystkie wartości danej kolumny? może 'List ' lub inny zbiór danych? Może chcesz zapisać to do pliku? –

Odpowiedz

4

Wystarczy użyć indeksu, aby uzyskać dostęp do każdego elementu. Poniższy kod przydałby się pierwszemu elementowi na liście.

list[0].MyString; 
+1

co to jest mystring? – Ryan

+0

nazwa usługi, do której próbujesz uzyskać dostęp. – BentOnCoding

+1

I możesz uzyskać dostęp do każdej pojedynczej kolumny według listy [0] ["nazwa kolumny"] lub według indeksu kolumny, jak na liście [0] [0] – Slider345

6

Można to zrobić,

foreach(var row in list) 
{ 
    var value = row["ColumnName"] as string; 
} 

czy to aby wszystkie wartości ciągów z "ColumnName" leniwie.

var values = list.Select(row => row["ColumnName"] as string); 

Dlaczego jednak zmienisz DataTable w listę? Zastanawiam się.

+0

Tak naprawdę potrzebuję całej zawartości dataru jako elementów listy, dzięki czemu mogę nimi manipulować łatwiej – Ryan

+0

Ponieważ datarow będzie zawierał obiekty, będziesz musiał potem rzucić je wszystkie we właściwy typ i użyć jakiejś nie ogólnej listy (ArrayList, na przykład), aby przenieść zawartość DataRow do tablicy. Niekoniecznie jest to najlepszy sposób, ale zależy to od twojej sprawy. –

+0

Lista <> jest dużo bardziej poręczna niż DataTable, ale jeśli twoja tabela jest ogromna, możesz być lepiej, używając samego 'dt', aby uniknąć tworzenia niemal duplikatowej struktury danych. Może indeksować podobnie jak List <>. Mówię, że popełniłem ten sam błąd w przeszłości, a następnie uruchomiłem ogromne zbiory danych. Tworzenie listy w ten sposób może być wolne. :) –

0

Można go pobrać według nazwy kolumny lub indeksu. Więc jeżeli ciąg, który próbujesz pobrać, znajduje się w pierwszej kolumnie, możesz zrobić listę [rowNum] [0] .ToString()

+0

nie ma kolumn w strzałce datariów .... – Ryan

+0

Jeśli w tabeli danych znajdują się dane, to będzie to kolumna. Spróbuj wydrukować listę [0] [0] .ToString() i powinieneś ją zobaczyć. – devsh

1

To powinno wystarczyć. string t = list[row]["column name"].ToString();

1

Będziesz musiał użyć standardowego indeksujących na DataRow:

string someValue = 
list[0]["SomeColumn"] as string; 

Albo, jeśli chcesz pracować z tablicy danych pochodzących z rzędu,

ArrayList lst = new ArrayList(list[INDEX_OF_THE_ROW].Count); 

foreach(object value in list[INDEX_OF_THE_ROW]) 
{ 
    lst.Add(value); 
} 
1
List<DataRow> list = dt.AsEnumerable().ToList(); 
    var mystring = list[0]["ColumnName"].ToString();