Создание собственного GridviewAdapter

Я хотел бы сделать простой адаптер для элемента управления 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 ответ

Решение

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);
    }
}
Другие вопросы по тегам