Tengo un método que me devuelve un DataTable con los siguientes datos:
Lo que necesito es tener en el DataTable sólo las cadenas que están después del primer espacio en blanco (por ejemplo, si se desea separar apellidos y nombres).
Las columnas del DataTable no son necesariamente son del tipo string (pueden ser Date Time o tipos numéricos), si todas las columnas fueran tipo String sería fácil extraer las subcadenas. Cambiar el valor de la propiedad ValueType de las columnas no funciona cuando el DataTable ya tiene datos.
Lo que se me ocurrió fue crear cuatro columnas nuevas que almacenaran datos tipo string, leer el dato correspondiente de cada fila de cada columna original, convertirlo a cadena de caracteres, extraer las subcadenas que necesito, copiarlas a la fila respectiva de una de las columnas nuevas.
Este es el método que me devuelve el DataTable sólo con las subcadenas (las que están después del espacio en blanco):
DataTable dTable = algunMetodo();
int col = dTable.Columns.Count;
dTable.Columns.Add("T11", typeof(string));
dTable.Columns.Add("T22", typeof(string));
dTable.Columns.Add("C11", typeof(string));
dTable.Columns.Add("C22", typeof(string));
for (int i = 0; i < dTable.Rows.Count; i++)
for (int j = 0; j < col; j++)
{
string subcadena;
int n;
subcadena = dTable.Rows[i][j].ToString();
n = subcadena.IndexOf(' ');
subcadena = subcadena.Substring(n + 1);
dTable.Rows[i][j + col] = subcadena;
}
// esta parte es opcional si no se desean las columnas originales
for (int j = 0; j < col; j++)
dTable.Columns.Remove(dTable.Columns[j]);
int col = dTable.Columns.Count;
dTable.Columns.Add("T11", typeof(string));
dTable.Columns.Add("T22", typeof(string));
dTable.Columns.Add("C11", typeof(string));
dTable.Columns.Add("C22", typeof(string));
for (int i = 0; i < dTable.Rows.Count; i++)
for (int j = 0; j < col; j++)
{
string subcadena;
int n;
subcadena = dTable.Rows[i][j].ToString();
n = subcadena.IndexOf(' ');
subcadena = subcadena.Substring(n + 1);
dTable.Rows[i][j + col] = subcadena;
}
// esta parte es opcional si no se desean las columnas originales
for (int j = 0; j < col; j++)
dTable.Columns.Remove(dTable.Columns[j]);
return dTable;
Este método recorre cada celda del DataTable, copia su contenido en una variable tipo string llamada "subcadena" y usa la instrucciones IndexOf y Substring para extraer la parte de la cadena que está después del primer espacio en blanco, la cual copia a la celda respectiva en las nuevas columnas añadidas.
Y así es como queda el DataTable:
2 comentarios:
hola necesuto ayuda con dataset, necesito saber como hacer un blucle que elimine las filas vacias del dataset
Las filas vacías están dentro de las tablas en el dataset. Para detectar filas vacías tendrías que chequear que todas sus celdas sean nulas. Escribí un poco sobre eso aquí:
http://programacionamartillazos.blogspot.com/2013/01/c-propiedad-select-de-un-datatable-un.html
Publicar un comentario