创建自定义GridviewAdapter

时间:2012-09-12 15:28:04

标签: asp.net gridview control-adapter

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

而不是呈现为

<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的适配器的代码,那么更改会很简单,但是我不知道如何获取该代码。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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);
    }
}