2010-08-05 77 views
0

我有这样的数据表(我从Excel工作表中获取数据)。 我将Excel表转换为数据表。现在我需要格式化数据。 这就是我的数据表的样子。如何将数据分组在c#中的数据表#

Lead EMPnames 
vinay kumar 
vinay manju.u 
vinay kiran 
anitha manju.k 
anitha rahul 
sandeep arjun 
sandeep manu 
rohit  sandeep 
rohit  vinay 
rohit  anitha 

现在我需要格式化数据表是这样的:

Lead  EMPnames 
vinay kumar 
     manju.u 
     kiran 
sandeep arjun 
     manu 
anitha manju.k 
     rahul 
rohit sandeep 
     vinay 
     anitha 

任何想法,如何做到这一点? 任何帮助,将不胜感激

谢谢。

+0

你是什么意思与格式?格式化到屏幕? – Carra 2010-08-05 07:29:18

回答

0

我们已经在数组中领先名称。通过这种方式,我解决了这个问题

#region Grouping by Teamlead 
    DataTable dtGroup = new DataTable(); 
    dtGroup = dtResult.Clone(); 
    foreach (DataColumn dc in dtResult.Columns) 
    { 
     dc.DataType = typeof(string); 
    } 
    dtGroup.AcceptChanges(); 

    foreach (string s in srLead) 
    { 
     string name = s; 
     DataTable dtsource = new DataTable(); 
     dtsource = TeamLeadFilter(dtResult, name); 
     CombineDatatable(ref dtGroup, dtsource); 
     dtGroup.AcceptChanges(); 
    } 
    #endregion 

    #region TeamLeadFilter 
    public DataTable TeamLeadFilter(DataTable dtResult, string str) 
    { 
     DataView dvData = new DataView(dtResult); 
     dvData.RowFilter = "TeamLead ='" + str + "'"; 
     return dvData.ToTable(); 
    } 
    #endregion 

    #region CombineDatatable 
    public DataTable CombineDatatable(ref DataTable destini, DataTable source) 
    { 
     foreach (DataRow dr in source.Rows) 
     { 
      destini.ImportRow(dr); 
     } 
     return destini; 
    } 
    #endregion 

string[] srLead = { "vinay", "sandeep", "anitha", "rohit" }; 

然后取源数据表和筛选它基于领先的名字,并添加到一个新的DataTable。

1

为什么不使用linq和“group by”子句?

例如,请参见下面的链接示例3:

http://msdn.microsoft.com/en-us/vcsharp/aa336754.aspx#simple1

+0

为了保持最新,上面的链接现在重定向到一般的101 LINQ。这就是为什么在答案中显示代码示例而不是发布链接总是更好的原因。要查找旧链接指出的代码,请转到分组部分,然后单击其中列出的任何样本。 – Nope 2012-01-31 14:38:01