Как получить выбранные столбцы из таблицы данных - PullRequest
0 голосов
/ 29 марта 2011

У меня есть таблица данных с 10 столбцами, но пользователь может выбрать столбцы для отображения, поэтому мне нужно создать общий код для отображения только выбранных столбцов.

Current code:
    string[] selectedColumns = new[] { };
    DataTable columns = new DataView(table).ToTable(false, selectedColumns); 

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Вы можете просто скрыть столбцы в сетке данных (предположим, что вы используете один)

dataGridView1.Columns["ColName"].Visible = False;

для каждого столбца, которого нет в selectedColumns

Но если вам действительно нужно отфильтровать набор данных, я помню, что вы можете сделать что-то вроде:

mydatatable.Columns.Remove("ColName");

в ваших данных ... или в копии.

Если вы собираетесь показывать столбцы в сетке данных, я могу установить свойство ColumnMapping столбца с данными, как это

mydatatable.Columns["Colname"].ColumnMapping = MappingType.Hidden;

К сожалению, меня сейчас нет дома, поэтому я не могу проверить это, но, как вы можете видеть, есть много вариантов.

РЕДАКТИРОВАТЬ: В ответ на ваш запрос, вы можете иметь дело с не выбранными столбцами, как это:

    for(int i = 0;i<dt.Columns.Count;i++)
    {
        if(!selectedColumns.Contains(dt.Columns[i].ColumnName))
        {
            dt.Columns[i].ColumnMapping = MappingType.Hidden;
        }
    }
0 голосов
/ 24 сентября 2012
   public static void Main(string[] args)
    {
        DataTable act = new DataTable();
        act.Columns.Add(new DataColumn("id", typeof(System.Int32)));
        act.Columns.Add(new DataColumn("name"));
        act.Columns.Add(new DataColumn("email"));
        act.Columns.Add(new DataColumn("phone"));

        DataRow dr = act.NewRow();
        dr["id"] = 101;
        dr["name"] = "Rama";
        dr["email"] = "rama@mail.com";
        dr["phone"] = "0000000001";
        act.Rows.Add(dr);

        dr = act.NewRow();
        dr["id"] = 102;
        dr["name"] = "Talla";
        dr["email"] = "talla@mail.com";
        dr["phone"] = "0000000002";
        act.Rows.Add(dr);

        dr = act.NewRow();
        dr["id"] = 103;
        dr["name"] = "Robert";
        dr["email"] = "robert@mail.com";
        dr["phone"] = "0000000003";
        act.Rows.Add(dr);

        dr = act.NewRow();
        dr["id"] = 104;
        dr["name"] = "Kevin";
        dr["email"] = "kevin@mail.com";
        dr["phone"] = "0000000004";
        act.Rows.Add(dr);

        dr = act.NewRow();
        dr["id"] = 106;
        dr["name"] = "TomChen";
        dr["email"] = "tomchen@mail.com";
        dr["phone"] = "0000000005";
        act.Rows.Add(dr);

       var lselColumns = new[] {"id", "name"};
       var dt = act.DefaultView.ToTable(true, lselColumns);
       foreach (DataRow drow in dt.Rows)
       {
           string drowData = string.Empty;

           foreach (DataColumn r in drow.Table.Columns)
           {
               drowData += (drowData == string.Empty) ? drow[r] : "|" + drow[r];
           }
           Console.WriteLine(drowData);

       }
       Console.ReadLine();
    }
...