在gridview中填充单行中多行的值

时间:2011-03-28 19:41:46

标签: c# asp.net gridview

我正在尝试使用网页后面的代码的rowdatabound部分中的c sharp填充gridview中单行中多行的值,如:

Col1      Col6

a            1
a            2
a            3
a            4

我已将此更改为

Col1     Col6

a           1 
            2
            3
            4

现在我想实现这个目标,请帮忙吗?

Col1     Col6

a            1  2  3  4

下面的代码有什么问题?

if (e.Row.Cells[0].Text == "" && e.Row.Cells[5].Text != "")
{
    for (int a = 0; a<GridView1.Rows.Count; a++)
    {
        string s = GridView1.Rows[a].Cells[5].Text;
        GridView1.Rows[e.Row.RowIndex - 1].Cells[5].Text +=  s;
    }
}

我犯了什么错,有人吗?

Cell[0]  is Col1
Cell[5]  is Col6

1 个答案:

答案 0 :(得分:0)

我认为你是从错误的方向接近这个。将GridView视为仅显示。您需要在将数据交给GridView之前尽可能安排数据。我不确定您的数据是如何存储的,但您可能希望迭代数据并创建基本上是分组的新记录,并将您需要的所有数据放在一个可以数据绑定到的行中。

使用RowDataBound(或任何数据绑定方法)的问题在于,您要逐行处理数据,这不是您想要的,因为您无法“看到”其他行数据这是背景。

至于排列数据,您可以使用以下代码段获取每个col1值的逗号分隔列表:

 string commaValues = string.Join(",",
     (yourList.Where(i => i.Col1.Equals(someValue)).
      Select(s => s.YourStringValue)).ToArray()));

这将为给定值(例如someValue)生成逗号分隔的字符串:

 commaValues = "1,2,3,4,5"

使用上述内容组成List个对象,这样您就可以直接绑定它。例如:

class NewObject
{
    public string ID { get; set; }
    public string Text { get; set; }
}

List<NewObject> arrangedData = new List<NewObject>();
// arrange the data here
yourGrid.DataSource = arrangedData;
yourGrid.DataBind();