Pergunta

Eu estou usando um serviço web que retorna um conjunto de dados. neste conjunto de dados, existem 5 mesa, digamos que a tabela A, B, C, D, E. Eu uso tabela A.

Assim

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

Agora, nesta tabela de dados existem colunas A1, A2, A3, A4, A5, A6, A7.

Vamos dizer que eu só querem obter colunas A3 e A4, em seguida, vinculá-lo ao meu datagrid.

Como posso fazer isso?

Foi útil?

Solução

Ignorar o fato de que você tem mais dados do que você precisa. Set AutoGenerateColumns para false. Criar BoundColumns para a3 e a4.

Outras dicas

Eu recomendo a leitura este artigo de 4GuysFromRolla para quem precisa uma boa compreensão da DataGrid Controle web.

Nota: Uma vez que esta pergunta já foi respondida. Quero esclarecer o que precisa ser feito, apenas no caso de alguém está se perguntando.

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;
}

Eu vincular a tabela inteira, em seguida, configurar a visibilidade das colunas da seguinte forma

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

Você pode sempre tentar definir propriedades DataPropertyName de colunas específicas para corresponder ao que está em seu DataTable. Em seguida, ligar esse DataTable a um BindingSource e vincular essa fonte binging para sua grade.

Enquanto nomes de colunas em suas DataPropertyNames jogo DataTable de suas colunas DataGrid, sua grade de dados deve exibir apenas as colunas correspondentes.

No meu exemplo meu proc Stred faz algo simle como:

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

e meu 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();
    }
}

Boa sorte!

Hi sequência código pode ser usado

//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);

Eu tentei isso e ele 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top