2012-09-12 79 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