Создание собственного 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);
}
}