2011-06-27 167 views
10

Tengo una pregunta con respecto a DataRows. Tengo un DataTable que luego convertí en una lista de DataRow. Ahora quiero la información de cadena almacenada en cada DataRow. ¿Cómo puedo hacer esto? Este es mi código:Obtener valor de datarow en C#

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

"Ahora quiero que la información de cadena esté almacenada en cada datarow". Esto es un poco confuso. ¿Desea una concatenación de todos los valores de una columna en particular? tal vez una 'Lista ' o alguna otra colección de datos? ¿Tal vez quieres escribirlo en un archivo? –

Respuesta

4

Solo tiene que usar un índice para acceder a cada elemento. El siguiente código accedería al primer elemento de la lista.

list[0].MyString; 
+1

¿Qué es mystring? – Ryan

+0

el nombre de la propiedad a la que intenta acceder. – BentOnCoding

+1

Y puede acceder a cada columna individual por lista [0] ["columnname"], o por índice de columna, como en la lista [0] [0] – Slider345

6

Se podría hacer esto,

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

o esto para obtener todos los valores de cadena de "ColumnName" pereza.

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

¿Por qué convertir una DataTable en una lista? Sólo me preguntaba.

+0

De hecho, necesito todos los contenidos del datarow como elementos de lista para poder manipularlos más fácilmente – Ryan

+0

Dado que el datarow contendrá objetos, tendrá que convertirlos a continuación en un tipo apropiado y usar una lista no genérica (ArrayList, por ejemplo), para mover los contenidos de DataRow a una matriz. Esta no es necesariamente la mejor manera de hacerlo, pero depende de su caso. –

+0

La lista <> es mucho más manejable que DataTable, pero si su tabla es grande, es mejor que use 'dt' para evitar crear una estructura de datos casi duplicada. Puede indexar al igual que List <> después de todo. Digo que cometió el mismo error en el pasado y luego se encontró con enormes conjuntos de datos. La creación de listas como esta puede ser lenta. :) –

0

Puede recuperarlo por nombre de columna o por índice. Entonces, si la cadena que está tratando de recuperar está en la primera columna, puede hacer una lista [rowNum] [0] .ToString()

+0

no hay columnas en una flecha de datarows .... – Ryan

+0

Si hay datos en la tabla de datos, estaría en una columna. Intente imprimir la lista [0] [0] .ToString() y debería verla. – devsh

1

Esto debería hacer el truco. string t = list[row]["column name"].ToString();

1

Usted tendrá que utilizar un indexadores estándar en DataRow:

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

O, si se quiere trabajar con el conjunto de los datos procedentes de una fila,

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(); 
Cuestiones relacionadas