2012-09-12 50 views
0

我想为Gridview控件制作一个简单的适配器,它将呈现<div>标记内的单元格内容。创建自定义GridviewAdapter

而是呈现为

<table> 
    <tr> 
    <td>Some Data</td> 
    <td>Some Data</td> 
    </tr> 
</table> 

我想它呈现为

<table> 
    <tr> 
    <td><div>Some Data</div></td> 
    <td><div>Some Data</div></td> 
    </tr> 
</table> 

我明白这是可以做到使用jQuery或的RowDataBound其他方式,但我特别想用适配器来做。

在我看来,如果有一种方法可以查看创建默认.Net Gridview的适配器的代码,但我不知道如何获取该代码。

任何帮助,非常感谢。

回答

3

Microsoft提供控制适配器的参考实施的CSS Friendly Control Adapters

你可以看看他们是如何实现的GridViewAdapter

以下形式是与渲染行打交道的代码的位

private void WriteRows(HtmlTextWriter writer, GridView gridView, GridViewRowCollection rows, string tableSection) 
{ 
    if (rows.Count > 0) 
    { 
     writer.WriteLine(); 
     writer.WriteBeginTag(tableSection); 
     writer.Write(HtmlTextWriter.TagRightChar); 
     writer.Indent++; 

     foreach (GridViewRow row in rows) 
     { 
      if (!row.Visible) 
       continue; 

      writer.WriteLine(); 
      writer.WriteBeginTag("tr"); 

      string className = GetRowClass(gridView, row); 
      if (!String.IsNullOrEmpty(className)) 
      { 
       writer.WriteAttribute("class", className); 
      } 

      writer.Write(HtmlTextWriter.TagRightChar); 
      writer.Indent++; 

      foreach (TableCell cell in row.Cells) 
      { 
       DataControlFieldCell fieldCell = cell as DataControlFieldCell; 
       if ((fieldCell != null) && (fieldCell.ContainingField != null)) 
       { 
        DataControlField field = fieldCell.ContainingField; 
        if (!field.Visible) 
        { 
         cell.Visible = false; 
        } 

        // Apply item style CSS class 
        TableItemStyle itemStyle; 
        switch (row.RowType) 
        { 
         case DataControlRowType.Header: 
          itemStyle = field.HeaderStyle; 
          // Add CSS classes for sorting 
          SetHeaderCellSortingClass(gridView, field, itemStyle); 
          break; 
         case DataControlRowType.Footer: 
          itemStyle = field.FooterStyle; 
          break; 
         default: 
          itemStyle = field.ItemStyle; 
          break; 
        } 
        if (itemStyle != null && !String.IsNullOrEmpty(itemStyle.CssClass)) 
        { 
         if (!String.IsNullOrEmpty(cell.CssClass)) 
          cell.CssClass += " "; 
         cell.CssClass += itemStyle.CssClass; 
        } 
       } 

       writer.WriteLine(); 
       cell.RenderControl(writer); 
      } 

      writer.Indent--; 
      writer.WriteLine(); 
      writer.WriteEndTag("tr"); 
     } 

     writer.Indent--; 
     writer.WriteLine(); 
     writer.WriteEndTag(tableSection); 
    } 
} 
+0

我有一种强烈的感觉,有人会指出我在这个方向。对我来说不幸的是,CSSFriendly Adapters对渲染进行了额外的修改,因为这个项目会导致我额外的工作。不过,我有一种感觉,这可能是唯一的选择。我希望我能看到呈现方法的.NET呈现网格视图的方式,而不应用适配器。 –

+0

这就是说,如果没有其他人可以准确地给我我正在寻找的东西,我会接受这个答案(我会让它坐在周末)+1 –

+0

我不是建议你使用CSS友好的适配器。我是说你写自己的。然后你可以输出你想要的输出 – nunespascal