0

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

任何帮助是极大的赞赏。

4

1 回答 1

3

Microsoft 以CSS 友好控制适配器的形式提供了控制适配器的参考实现

你可以看看他们是如何实现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);
    }
}
于 2012-09-12T18:30:02.927 回答