2013-12-10 3 views
0

Со ссылкой на эту ссылку: http://www.4guysfromrolla.com/articles/091708-1.aspx Я хочу реализовать заголовки группировки для gridview, аналогичные тому, что показано в приведенном ниже списке.сгруппированные заголовки в gridview

HTML Источник:

<asp:ListView ID="ProductsGroupedByDataField" runat="server" DataSourceID="odsAllPlannedLeaves" 
    <LayoutTemplate> 
     <table cellspacing="0" cellpadding="5" rules="all" border="1" > 
     <tr style="background-color:#5D7B9D;color:White"> 
    <th>Start Date</th> 
    <th>End Date</th> 
    <th>Date Of Applying</th> 
    </tr> 
     <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> 
     </table> 
    </LayoutTemplate> 

    <ItemTemplate> 
    <%# AddGroupingRowIfSupplierHasChanged() %> 

     <tr class='data<%# Container.DataItemIndex % 2 %>'> 
     <td><%#GetDate(Eval("Emp_StartDate"))%></td> 
     <td><%#GetDate(Eval("Emp_EndDate"))%></td> 
     <td><%#GetEntryDate(Eval("Emp_EntryDate"))%></td> 

     </tr> 
    </ItemTemplate> 

</asp:ListView> 

Метод:

int LastEmpId = 0; 
    protected string AddGroupingRowIfSupplierHasChanged() 
    { 
     int CurrentEmpId = Convert.ToInt32(Eval("Emp_Id").ToString()); 
     if (LastEmpId != CurrentEmpId) 
     { 
      LastEmpId = CurrentEmpId; 
      string CurrentEmpName = Eval("Emp_Name").ToString(); 
      string CurrentEmailId = Eval("Emp_EmailID").ToString(); 
      return string.Format("<tr style='text-align:left' class='group'><td colspan='3'>Employee Name: " + CurrentEmpName + "&nbsp;&nbsp;|&nbsp;&nbsp;Email Id: " + CurrentEmailId + "</td></tr>"); 
     } 
     else 
      return string.Empty; 
    } 

Как я могу осуществить это в GridView?

ответ

0

Я использую этот небольшой «перерыв» для подзаголовки Gridview «s:

private string tmpCategoryName = ""; 

protected void gdvRowDatabound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) { 
    HiddenField hdnTmpSubTitle = (HiddenField)e.Row.FindControl("hdnTmpSubTitle"); 

    if (!(tmpCategoryName == hdnTmpSubTitle.Value)) { 

     tmpCategoryName = hdnTmpSubTitle.Value; 
     Table tbl = e.Row.Parent as Table; 
     if (tbl != null) { 
      GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal); 
      TableCell cell = new TableCell(); 

      cell.ColumnSpan = this.grdViewProjects.Columns.Count; 
      cell.Width = Unit.Percentage(100); 
      cell.Style.Add("font-weight", "bold"); 
      cell.Style.Add("background-color", "#c0c0c0"); 
      cell.Style.Add("color", "white"); 
      HtmlGenericControl span = new HtmlGenericControl("span"); 
      span.InnerHtml = tmpCategoryName; 
      cell.Controls.Add(span); 
      row.Cells.Add(cell); 
      tbl.Rows.AddAt(tbl.Rows.Count - 1, row); 

     } 
    } 
} 

}

Этот код получает высший уровень„Категория“, которая находится в вашем Gridview и просто создает дополнительную таблицу строка с одной отдельной ячейкой добавляет стиль, а затем добавляет название категории. Если категория отличается от строки к строке, измените ее. Убедитесь, что ваш datasource заказан по вашей «категории» первым (или тем, что вы используете в качестве подзаголовка).

Также убедитесь, что вы разместили HiddenField с «Категории» в Template Field в своем Gridview.

Смежные вопросы