2013-04-22 16 views
15

Tôi cần hiển thị dữ liệu trong chế độ xem lưới với các hàng đã hợp nhất cho một số cột. Xin hãy giúp tôi chuẩn bị một cái nhìn lưới ở định dạng dưới đây định nghĩa: enter image description hereGridView với các ô đã phối

Và dữ liệu gốc xuất phát từ cơ sở dữ liệu ở dưới dạng: enter image description here

hãy giúp tôi để tìm cách tốt nhất để thực hiện nhiệm vụ này tự động và hiệu quả.

+0

Hiện mã của bạn .. –

Trả lời

18

Bạn sẽ phải sử dụng RowSpan.

Tham khảo mã sau cho nó:

protected void GridView1_DataBound1(object sender, EventArgs e) 
{ 
    for (int rowIndex = GridView1.Rows.Count - 2; 
            rowIndex >= 0; rowIndex--) 
    { 
    GridViewRow gvRow = GridView1.Rows[rowIndex]; 
    GridViewRow gvPreviousRow = GridView1.Rows[rowIndex + 1]; 
    for (int cellCount = 0; cellCount < gvRow.Cells.Count; 
                cellCount++) 
    { 
    if (gvRow.Cells[cellCount].Text == 
          gvPreviousRow.Cells[cellCount].Text) 
    { 
     if (gvPreviousRow.Cells[cellCount].RowSpan < 2) 
     { 
     gvRow.Cells[cellCount].RowSpan = 2; 
     } 
     else 
     { 
     gvRow.Cells[cellCount].RowSpan = 
      gvPreviousRow.Cells[cellCount].RowSpan + 1; 
     } 
     gvPreviousRow.Cells[cellCount].Visible = false; 
    } 
    } 
} 

referance:

https://sites.google.com/site/learning6329/asp-net/gridview-merge-cells

Pictorial Ví dụ như trong câu hỏi:

http://marss.co.ua/MergingCellsInGridView.aspx

+0

Nhờ sự giúp đỡ của bạn, mã này hoạt động chính xác theo yêu cầu của tôi. – himanshu

+0

Luôn được chào đón. – Freelancer

+0

Một điều nữa tôi cần hỏi là có cách nào để hạn chế việc hợp nhất ô này để sửa các cột không cho tất cả các cột của chế độ xem lưới. Ví dụ như trong bảng mẫu của tôi, tôi đã cung cấp trong câu hỏi, chúng tôi sẽ thực hiện bất kỳ hạn chế nào để việc hợp nhất ô sẽ không được áp dụng trên cột trường Nhận xét. – himanshu

1

Cách đơn giản nhất để hợp nhất Hàng-ô của cột đầu tiên như sau. Xin lưu ý rằng For Loop luôn được lặp lại ngược lại.

protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     int RowSpan = 2; 
     for (int i = GridView1.Rows.Count-2; i >=0 ;i--) 
     { 
      GridViewRow currRow = GridView1.Rows[i]; 
      GridViewRow prevRow = GridView1.Rows[i+1]; 
      if (currRow.Cells[0].Text == prevRow.Cells[0].Text) 
      { 
       currRow.Cells[0].RowSpan = RowSpan; 
       prevRow.Cells[0].Visible = false; 
       RowSpan += 1; 
      } 
      else 
       RowSpan = 2; 
     } 
    } 

Nếu bạn muốn kết hợp hàng tế bào của tất cả các cột tương tự, bạn có thể sử dụng một "forloop" trong forloop ngoài viết ở trên

+0

Giải pháp này làm việc hoàn hảo cho tôi vì nó, kết hợp 3 hàng thành 1 cho cột đầu tiên –