2011-03-28 73 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