2011-03-29 68 views
0

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

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

回答

1

你可以简单地隐藏在DataGridView列不在selectedColumns

但如果你真的需要过滤(假设你正在使用一个)

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

每列数据集,我记得你可以做这样的事情:

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

你能告诉我怎么去未选择列的列表。 – psobhan 2011-03-29 10:42:31

+0

问题编辑得到未选中的列。 – Jonathan 2011-03-29 17:43:12

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"] = "[email protected]"; 
     dr["phone"] = "0000000001"; 
     act.Rows.Add(dr); 

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

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

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

     dr = act.NewRow(); 
     dr["id"] = 106; 
     dr["name"] = "TomChen"; 
     dr["email"] = "[email protected]"; 
     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(); 
    } 
相关问题