Pregunta

Estoy usando un servicio web que devuelve un conjunto de datos. en este conjunto de datos hay 5 tablas, digamos tablas A, B, C, D, E. Yo uso la tabla A.

Entonces

DataTable dt = new DataTable()
dt = dataset.Table["A"]

Ahora en esta tabla de datos hay columnas a1, a2, a3, a4, a5, a6, a7.

Digamos que solo quiero obtener las columnas a3 y a4 y luego enlazarlas a mi cuadrícula de datos.

¿Cómo hago esto?

¿Fue útil?

Solución

Ignora el hecho de que tienes más datos de los que necesitas. Establezca AutoGenerateColumns en false . Cree BoundColumns para a3 y a4 .

Otros consejos

Recomiendo leer este artículo de 4GuysFromRolla para cualquier persona que necesite una buena comprensión del control web DataGrid .

Nota: Ya que esta pregunta ya está contestada. Quiero aclarar qué se debe hacer, en caso de que alguien más se esté preguntando.

DataSet ds;

//Get Data
using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "GetMyData";
        command.CommandType = CommandType.StoredProcedure;

        ds = connection.ExecuteDataSet();
    }
if(ds !=null && ds.Tables.Count > 0)
{
    dg.DataSource = ds.Tables[0];
    // disable autogeneration of columns
    dg.AutoGenerateColumns = false;
    //Hide unecessary columns
    dg.Columns["a3"].Visible = false;
    dg.Columns["a4"].Visible = false;
}

Debería enlazar toda la tabla y luego configurar la visibilidad de las columnas de la siguiente manera

dgvMain.Columns[ColumnA3_Name].Visible = true;
dgvMain.Columns[ColumnA1_Name].Visible = false;

Siempre puedes intentar establecer las propiedades de DataPropertyName de columnas particulares para que coincidan con lo que hay en tu DataTable. Luego vincule esa DataTable a un BindingSource y enlace esa fuente de enlace a su grilla.

Siempre que los nombres de las columnas en su DataTable coincidan con los DataPropertyNames de sus columnas de DataGrid, su cuadrícula de datos debería mostrar solo las columnas coincidentes.

En mi ejemplo, mi proceso stred hace algo similar a esto:

ALTER PROCEDURE ps_Clients_Get
AS
BEGIN
    SELECT 
        convert(varchar(2000), path) as [Client Folder], 
        c.description as [Client Name],
        c.* 
    FROM Client c
END 
GO

y mi código C #:

using (DataTable dt = new DataTable())
{
    using (OdbcConnection cnDsn = new OdbcConnection(cmLocalTrackingDBDSNAME))
    {
        cnDsn.Open();
        using (OdbcCommand cmdDSN = new OdbcCommand())
        {
                  var _with1 = cmdDSN;
                  _with1.Connection = cnDsn;
                  _with1.CommandType = System.Data.CommandType.StoredProcedure;
                  _with1.CommandText = "{ CALL ps_Clients_Get }";
                  using (OdbcDataAdapter adapter = new OdbcDataAdapter())
                  {
                            dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                            adapter.SelectCommand = cmdDSN;
                            adapter.Fill(dt);
                            bindingSourceDataLocation.DataSource = dt;
                            dataGridViewDataLocation.AutoGenerateColumns = false;

                            dataGridViewDataLocation.DataSource = bindingSourceDataLocation;
                  }
         }
         cnDsn.Close();
    }
}

¡Buena suerte!

Se puede utilizar el siguiente código de seguimiento

//It represent name of column for which you want to select records
string[] selectedColumns = new[] { "a3", "a4" }; 

DataTable tableWithSelectedColumns = new DataView(dataset.Table["A"]).ToTable(false,  selectedColumns);

He intentado esto y funciona.

    Dim DT As DataTable = YourDT

    DGV.DataSource = dt
    DGV.AutoGenerateColumns = False

    Dim cc = DGV.ColumnCount

    For i = 0 To cc - 1
        DGV.Columns(i).Visible = False
    Next

    DGV.Columns("ColumnToShow").Visible = True
    DGV.Columns("ColumnToShow").Visible = True
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top