如何从数据表中获取选定的列

时间:2011-03-29 07:33:55

标签: c# datatable dataview

我有一个包含10列的数据表,但是用户可以选择要显示的列,因此我需要创建一个通用代码来仅显示所选列。

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

2 个答案:

答案 0 :(得分:1)

您可以简单地隐藏datagridview中的列(假设您正在使用一列)

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

表示不在selectedColumns

中的每一列

但是如果你真的需要过滤数据集,我记得你可以这样做:

mydatatable.Columns.Remove("ColName");

在您的数据表中......或副本中。

如果要在datagridview中显示列,我的选项将设置数据表列的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;
        }
    }

答案 1 :(得分:0)

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