2012-11-01 16 views
6

Potrzebujesz pomocy w rozwiązaniu problemu związanego z układem Gridview. Próbuję zaimplementować custome Gridview z kolumnami Itemtemplate za pomocą języka C# .Net i chcę uwzględnić widok przy użyciu właściwości RowSpan.Sposób korzystania z wiersza podziału w Gridview tylko dla pierwszej kolumny

As Below

Próbowałem skorzystać z poniższego kodu, ale nie działa dla mnie Here

Proszę sprawdzić kod, którego użyłem:

protected void GridView31_DataBound1(object sender, EventArgs e) 
{ 
    for (int rowIndex = grdView31.Rows.Count - 2; rowIndex >= 0; rowIndex--) 
    { 
     GridViewRow gvRow = grdView31.Rows[rowIndex]; 
     GridViewRow gvPreviousRow = grdView31.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; 
      } 
     } 
    } 

} 

Ale za każdym razem, gdy gvRow.Cells[cellCount].Text == gvPreviousRow.Cells[cellCount].Text jest pusty.

Dlatego siatka przyjmuje dziwne kształty. Nie wiem, co się tutaj dzieje.

Czy ktoś może pomóc?

Odpowiedz

11

Zastosowanie RowDataBound wydarzenie zamiast:

void GridView31_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.RowIndex % 4 == 0) 
     { 
      e.Row.Cells[0].Attributes.Add("rowspan", "4"); 
     } 
     else 
     { 
      e.Row.Cells[0].Visible = false; 
     } 
    } 
} 
+0

@Yuiry Jest to znacznie lepsze i bardzo łatwe do zrozumienia. – Pratik

1
protected void GridView31_DataBound1(object sender, EventArgs e) 
{ 
    int i = 1; 
    for (int rowIndex = grdView31.Rows.Count - 2; rowIndex >= 0; rowIndex--) 
    { 
     GridViewRow gvRow = grdView31.Rows[rowIndex]; 
     GridViewRow gvPreviousRow = grdView31.Rows[rowIndex + 1]; 

     if (i % 4 !=0) 
     { 
      if (gvPreviousRow.Cells[0].RowSpan < 2) 
      { 
       gvRow.Cells[0].RowSpan = 2; 
      } 
      else 
      { 
       gvRow.Cells[0].RowSpan = gvPreviousRow.Cells[0].RowSpan + 1; 
      } 
      gvPreviousRow.Cells[0].Visible = false; 
     } 
     i++; 
    } 

To działało dla mnie. Trial & błąd :)

+1

dużo lepszy ... http://marss.co.ua/MergingCellsInGridView.aspx – naveen

+0

@naveen Sprawdziłem powyższy roztwór działa perfekcyjnie i tak dużo lepiej niż to, co zrobiłem :) Dzięki naveen za udostępnienie tego – Pratik

+0

chętnie pomogę koleś ... :) ale rozwiązanie Yuriys rozwiązuje twój problem prawda? – naveen

0
'VB.NET Code 


Private Sub DG_Data_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles DG_Data.RowDataBound 
      Try 

       'fusion , rowspan , colspan , 
       If e.Row.RowType = DataControlRowType.DataRow Then 
        If e.Row.RowIndex Mod 4 = 0 Then 
         e.Row.Cells(0).Attributes.Add("rowspan", "4") 
        Else 
         e.Row.Cells(0).Visible = False 
        End If 
       End If 



      Catch ex As Exception 
       jq.msgErrorLog(ex) 
      End Try 
     End Sub 
Powiązane problemy