动态选项卡:使用数据集添加它们并检查它们是否存在

问题描述:

我想动态创建一个选项卡,稍后使用数据集中的数据填充该选项卡。 在我的数据集中,我有一个名为TabId的字段。它用作后来的标题和标识(在标签视图中),用于遍历它提取的数据集。由于将来可能会有更多的选项卡,并且客户需要的解决方案至少需要尽可能多的更新,我需要动态创建它们。但问题是包含我的选项卡数据的数据集包含tabId,在迭代表格时会重复执行多次。动态选项卡:使用数据集添加它们并检查它们是否存在

例如:

Rec 1 TabId = first 
Rec 2 TabId = first 
Rec 3 TabId = first 
Rec 4 TabId = first 
Rec 5 TabId = first 
Rec 6 TabId = first 
Rec 7 TabId = first 
Rec 8 TabId = Second 
Rec 9 TabId = Second 
Rec 10 TabId = Second 
Rec 11 TabId = Third 
Rec 12 TabId = Third 
Rec 13 TabId = Third 

等等...

所以基本上我知道我需要使用TabId foreach循环,但我需要每个不同的\唯一的ID只有一个选项卡。我如何迭代我的数据集并处理我的TabId的额外重复项,以便稍后可以使用它来即时创建我的选项卡。

我现在的(静态)代码:

intent = new Intent(this, typeof(Tab1)); 
intent.PutExtra("FormId", FormId); 
intent.PutExtra("TabNum", TabId); 
intent.PutExtra("EventNo", EventNo); 
intent.PutExtra("Ticket", Ticket); 
intent.PutExtra("DataSet", xml); 
intent.AddFlags(ActivityFlags.NewTask); 

// Initialize a TabSpec for each tab and add it to the TabHost 
spec = TabHost.NewTabSpec(TabId); // unique per tab 
spec.SetIndicator(TabId); // unique per tab 
spec.SetContent(intent); 
TabHost.AddTab(spec); 

我希望我自己很清楚。如果有任何问题,请不要犹豫。我会尽可能提供我所能提供的信息。

+0

什么与目前发生的事情以上?它只添加一个选项卡吗? – CR41G14 2013-03-04 10:49:17

+0

目前它是静态的,因此它添加了一个选项卡。我需要根据从web服务获得的数据集中的内容动态添加它们)。 – 2013-03-04 10:52:54

使用LINQ获取不同的列表和查询的原始数据源

var tabIDs = (from DataRow dr in dataTable.Rows 
     select (Int32)dr["TabID"]).Distinct(); 

从数据集:

var tabIDs = (from DataRow dr in dataSet.Tables["tableName"].Rows 
     select (Int32)dr["TabID"]).Distinct(); 

然后依次通过您的TabID的

foreach(Int32 tabID in tabIDs){ 

    spec = TabHost.NewTabSpec(tabID); // unique per tab 
    spec.SetIndicator(tabID); // unique per tab 
    spec.SetContent(intent); 
    TabHost.AddTab(spec); 

} 
+0

好的,适用于DataTable,但不适用于DataSet :) 我需要在这里使用数据集。仍然感谢您的帮助。 – 2013-03-04 11:47:52

+0

你能从数据集创建一个数据表吗?或参见编辑 – CR41G14 2013-03-04 11:53:10

+0

'System.Data.DataTable dt = new System.Data.DataTable(“TabIdTable”);' 'dt.Columns.Add(“TabId”,Type.GetType(“System.Int32”));' 'dt.Columns.Add(“TabCaption”,Type.GetType(“System.Int32”));' 'System.Data.DataView Dv = _DataSet.Tables [0] .DefaultView;' 'System.Data。 DataTable DtD = Dv.ToTable(true,“TabId”,“TabCaption”);' 根据您提供的洞察,使用您的建议和一些进一步的搜索解决:) – 2013-03-04 12:26:35