web-dev-qa-db-fra.com

sélectionner certaines colonnes d'une table de données

J'ai un datatable et voudrais savoir s'il est possible pour moi de sélectionner certaines colonnes et d'entrer les données sur une table. les colonnes sont indiquées ci-dessous

| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 | col11 |

Je veux sélectionner la colonne col1, col2 col6, col7, col3. et dispay les données dans un gridview des lignes dans le datatable .. actuellement le code que j'utilise est ci-dessous et sélectionne seulement certaines données. Je ne sélectionne pas les données de SQL, ses données étant sélectionnées à partir d'un autre Excel qui est stocké dans un fichier de données .. mais j'ai besoin des autres colonnes d'une autre zone également .. ces données sont en cours d'écriture dans une table dans Word

 for (int i = 1; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    if (j == 0)
                    {
                        val = filteredData.Rows[row][col].ToString();
                    }
                    else
                    {
                        val = filteredData.Rows[row][col].ToString();

                        if (val == "-" || val == "")
                        {
                            val = filteredData.Rows[row][col].ToString();

                        }
                        else
                        {
                            val = Convert.ToString(Math.Round(Convert.ToDouble(filteredData.Rows[row][col]), MidpointRounding.AwayFromZero));

                        }
                    }

                    table[j, i].TextFrame.Text = val;
                    col++;
                }
17
Jim Brad

Commencez par stocker la table dans une vue, puis sélectionnez les colonnes de cette vue dans une nouvelle table.

System.Data.DataTable table = new System.Data.DataTable();
for (int i = 1; i <= 11; i++)
    table.Columns.Add("col" + i.ToString());

for (int i = 0; i < 100; i++)
{
    System.Data.DataRow row = table.NewRow();
    for (int j = 0; j < 11; j++)
        row[j] = i.ToString() + ", " + j.ToString();
    table.Rows.Add(row);
}

System.Data.DataView view = new System.Data.DataView(table);
System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");

J'ai utilisé l'exemple de données pour tester cette méthode: Créer ADO.NET DataView montrant uniquement les colonnes sélectionnées

26
MrFox

Nous pouvons aussi essayer comme ça,

 string[] selectedColumns = new[] { "Column1","Column2"};

 DataTable dt= new DataView(fromDataTable).ToTable(false, selectedColumns);
37

La question que je voudrais poser est la suivante: pourquoi incluez-vous les colonnes supplémentaires dans votre DataTable si elles ne sont pas requises? 

Peut-être devriez-vous modifier votre instruction SQL select afin qu’elle examine les critères spécifiques que vous recherchez pendant le remplissage de votre DataTable.

Vous pouvez également utiliser LINQ pour interroger votre DataTable en tant qu’énumérable et créer un objet de liste ne représentant que certaines colonnes.

Sinon, masquez les colonnes DataGridView dont vous n’avez pas besoin.

1
Derek

Vous pouvez créer une méthode qui ressemble à ceci:

  public static DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2)
    {
        DataTable TempTable = RecordDT_;

        System.Data.DataView view = new System.Data.DataView(TempTable);
        System.Data.DataTable selected = view.ToTable("Selected", false, col1, col2);
        return selected;
    }

Vous pouvez retourner autant de colonnes que possible .. ajoutez simplement les colonnes en tant que paramètres d'appel, comme indiqué ci-dessous:

public DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2,string col3,...)

et ajoutez également les paramètres à cette ligne:

System.Data.DataTable selected = view.ToTable("Selected", false,col1, col2,col3,...);

Ensuite, implémentez simplement la fonction en tant que:

 DataTable myselectedColumnTable=SelectedColumns(OriginalTable,"Col1","Col2",...);

Merci...

0
Sunday Efeh

Voici un exemple de travail avec enregistrement de sortie anonyme, si vous avez des questions, placez un commentaire ci-dessous:

classe partielle publique Form1: Form { Table DataTable;

    public Form1()
    {
        InitializeComponent();

        #region TestData
        table = new DataTable();
        table.Clear();

        for (int i = 1; i < 12; ++i)
            table.Columns.Add("Col" + i);
        for (int rowIndex = 0; rowIndex < 5; ++rowIndex)
        {
            DataRow row = table.NewRow();
            for (int i = 0; i < table.Columns.Count; ++i)
                row[i] = String.Format("row:{0},col:{1}", rowIndex, i);
            table.Rows.Add(row);
        }
        #endregion

        bind();
    }

    public void bind()
    {
        var filtered = from t in table.AsEnumerable()
                       select new
                       {
                           col1 = t.Field<string>(0),//column of index 0 = "Col1"
                           col2 = t.Field<string>(1),//column of index 1 = "Col2"
                           col3 = t.Field<string>(5),//column of index 5 = "Col6"
                           col4 = t.Field<string>(6),//column of index 6 = "Col7"
                           col5 = t.Field<string>(4),//column of index 4 = "Col3"
                       };
        filteredData.AutoGenerateColumns = true;
        filteredData.DataSource = filtered.ToList();
    }
}
0
pawciu