Esta es una función muy útil si en algún momento necesitamos transponer los datos de un DataTable, recibe como parámetro un DataTable y devuelve otro DataTable.

private DataTable GenerateTransposedTable(DataTable inputTable)
{
     DataTable outputTable = new DataTable();

     // Se agregan las columnas haciendo un ciclo para cada fila

     // El encabezado de la primera columna es el mismo. 
     outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());

     // El encabezado para las demas columnas
     foreach (DataRow inRow in inputTable.Rows)
     {
         string newColName = inRow[0].ToString();
         outputTable.Columns.Add(newColName);
     }

     // Se agregan las columnas por cada renglón        
     for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++)
     {
         DataRow newRow = outputTable.NewRow();

          newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
         for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
         {
             string colValue = inputTable.Rows[cCount][rCount].ToString();
             newRow[cCount + 1] = colValue;
         }
         outputTable.Rows.Add(newRow);
     }

     return outputTable;
}

Fuente : http://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C 

En ocasiones se necesita copiar datos entre datatables, aqui pongo una manera facil de poder hacer estas operaciones.

Primero se declaran 2 datatables, el primero obtendra los resultados de un query, y por consecuencia tendra un numero determinado de columnas, se pone un ciclo para copiar el numero de columnas al 2do datatable y posteriormente se hace el copiado de datarows entre ambos

Dim DataTableLeer As New DataTable
Dim DataTableLeer2 As New DataTable
Dim selectcmd As New SqlClient.SqlDataAdapter

Dim conn As New SqlClient.SqlConnection(String.Format(“Data Source='{0}’;Initial Catalog='{1}’;User Id= ‘{2}’;Password ='{3}’;”, server, database, username, password))

conn.Open()
DataTableLeer.Clear()

selectcmd = New SqlClient.SqlDataAdapter(String.Format(“Select * from tabla “), conn)
selectcmd.Fill(DataTableLeer)

For i As Integer = 0 To DataTableLeer.Columns.Count – 1
DataTableLeer2.Columns.Add(DataTableLeer.Columns(i).ColumnName)
Next

DataTableLeer2.Rows.Add(DataTableLeer.Rows(0).ItemArray)

espero sea de utilidad

saludos

Como alguno saben y otros apenas se enteran(como es mi caso), en un datatable de VB .NET se pueden guardar distintos tipos de datos e inclusive Objetos, sin embargo, antes de agregar valores hay que declarar primero que tipo de valor se guardará para dicha columna, ya que en caso de no hacerlo por defecto se guardan como tipo String.

Para asignar un tipo de dato a una columna de un DataTable solamente hay que hacer lo siguiente

Continue reading