2011-03-28 70 views
1

我想用c锋利的代码的RowDataBound部分页面像后面来填充GridView中单列多行的值:填充单列多行的值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 

回答

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(); 
+0

如何写保护无效的Page_Load代码(对象发件人,发送System.EventArgs) – user680865 2011-03-30 13:24:59

+0

如何写在保护无效的Page_Load(对象发件人,发送System.EventArgs) – user680865 2011-03-30 13:26:43

+0

@ user680865我不是确定你想要什么。你还没有发布任何你的数据,GridView是什么等等。我已经发布了基本步骤,需要到达你想要的地方。在绑定之前将数据排列成新的数据结构。然后将'GridView'绑定到这个新对象,这样网格根本就不需要做任何工作,除非按原样显示数据。 – Kelsey 2011-03-30 15:18:29