2008-10-16 9 views
2

J'utilise un service Web qui renvoie un jeu de données. dans cet ensemble de données, il y a 5 table, disons le tableau A, B, C, D, E. J'utilise le tableau A.Comment afficher uniquement certaines colonnes d'une table de données?

Alors

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

Maintenant dans ce datatable il y a des colonnes a1, a2, a3 , a4, a5, a6, a7. Disons que je veux seulement obtenir les colonnes a3 et a4 puis les lier à mon DataGrid.

Comment faire?

+0

Cela aiderait si vous spécifiez votre plate-forme. Je suppose ASP.NET et C#, mais qui sait vraiment - pourrait être pseudocode. Pourriez-vous modifier/retester pour être plus précis? – tvanfosson

Répondre

11

Ignorez le fait que vous avez plus de données que nécessaire. Définissez AutoGenerateColumns sur false. Créez BoundColumns pour a3 et a4.

1

je aimerais lier toute la table, puis mettre en place la visibilité des coulmns comme suit

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

Je recommande de lire l'article de this 4GuysFromRolla pour ceux qui ont besoin d'une bonne compréhension du contrôle Web DataGrid.

Note: Comme cette question a déjà reçu une réponse. Je veux clarifier ce qui doit être fait, juste au cas où quelqu'un d'autre se demande.

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

Vous pouvez toujours essayer de définir DataPropertyName propriétés de colonnes particulières pour correspondre à ce qui est dans votre DataTable. Puis lier ce DataTable à un BindingSource et lier cette source binging à votre grille.

Tant que les noms des colonnes de votre DataTable correspondent à DataPropertyNames de vos colonnes DataGrid, votre grille de données doit afficher uniquement les colonnes correspondantes.

Dans mon exemple, mon Stred proc ne fait simle quelque chose comme:

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 

et mon code 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(); 
    } 
} 

Bonne chance!

0

Salut code suivant peut être utilisé

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

J'ai essayé et il fonctionne.

0
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 
Questions connexes