我有一个看起来像这样的表:
Name Hours
Mark 10
Mark 15
Mark 10
Mark 13
Albert 11
Albert 12
Max 10
Max 13
此数据驻留在数据表中,该数据表是我的gridview的数据源。我希望,如果可能的话,迭代数据表并在Name字段更改时插入一行。像这样:
Name Hours
Mark 10
Mark 15
Mark 10
Mark 13
Albert 11
Albert 12
Max 10
Max 13
是否可以使用foreach循环遍历此数据表并在名称更改时在该点插入一行?或者,是否有其他方法可以获得所需的结果?
感谢您的任何指示!
编辑:我的代码,到目前为止:
var counter = 0;
var holdName = "";
// looping through datatable dt.
foreach (DataRow row in dt.Rows)
{
//compare name from dt to hold name
//if different
// insert blank row
// change hold name to new name
//continue looping
}
gridview1.Datasource = dt;
gridview1.DataBind();
问题是,在循环中设置保留名称证明是棘手的。这就像它需要首先设置'ouside'循环,然后在循环中检查。问题是,如何在不获取数据表中的第一条记录的情况下知道名称是什么?也许,那是我的答案?获取第一条记录,将名称放在保留名称变量中,然后启动foreach循环?
答案 0 :(得分:2)
如果您使用ASP.NET ListView控件并使用数据分组,我认为您将获得更好的结果,如下所示:
Using ASP.NET 3.5's ListView and DataPager Controls: Grouping By a Data Field
这是一篇略显过时的文章,但我认为这会让你到达你想去的地方。
答案 1 :(得分:1)
正如Brad M所说,foreach
循环将起作用。您只需要将名称存储在变量中,并检查当前行的名称是否与最后一行中的名称相同(或者您可以检查当前行中的名称是否与下一行中的名称相同但是这可能会导致OutOfBoundsException。