Сегодня я бы хотел показать вам каким образом возможно вмешиваться в процесс наполнения элемента GridView строками из источника данных.
Например, имеется следующая псевдоразметка страницы .aspx:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Между строк</title>
<link href="StyleSheet.css" rel="stylesheet"
type="text/css" />
</head>
<body>
<form id="form2" runat="server">
<div>
<asp:SqlDataSource ID="MySqlDataSource"
runat="server" ConnectionString=
"<%$ ConnectionStrings:MyConnectionString %>"
SelectCommand=
"SELECT [ID], [ISBN], [AuthorID] FROM
MyTable"</asp:SqlDataSource>
<asp:GridView ID="MyGridView" runat="server"
AutoGenerateColumns="False" DataKeyNames="ID"
DataSourceID="MySqlDataSource"
onrowdatabound="MyGridView_RowDataBound">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ItemID"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="ISBN" HeaderText="ISBN"
SortExpression="ISBN" />
<asp:BoundField DataField="AuthorID"
HeaderText="AuthorID" SortExpression="AuthorID" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
Собственно, это не самое важное, на что следует обратить внимание, ведь код разметки очень простой:
1. Создали SqlDataSource и «натравили» его на табличку MyTable некоторой БД.
2. Создали объект GridView и привязали его к данному SqlDataSource.Больше здесь ничего интересного нет.
Если мы запустим данный пример, то в браузере увидим что-то подобное этому (раскраска может отличаться):

Но, нас такой вариант не устраивает, мы хотим, что б между строк находились цветные полоски, линия подчеркивания, или что-нибудь другое. В любом случае, мы хотим после каждой строки вставлять еще одну дополнительную пустую строку и уже на свое усмотрение заполнять её текстом, или какой-нибудь иной информацией.
Что бы провернуть данную затею, следует наш GridView подписать на событие RowDataBound. Теперь бихайнд-код изменится следующим образом:
protected void MyGridView_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
e.Row.BackColor = System.Drawing.Color.Bisque;
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.BackColor = System.Drawing.Color.LightYellow;
TableCell tableCell = new TableCell();
tableCell.Attributes["ColSpan"] =
MyGridView.Columns.Count.ToString();
tableCell.BackColor = System.Drawing.Color.Chocolate;
GridViewRow gridViewRow = new GridViewRow(-1, -1,
DataControlRowType.DataRow,
DataControlRowState.Normal);
gridViewRow.Cells.Add(tableCell);
Table table = e.Row.Parent as Table;
table.Controls.AddAt(
MyGridView.Controls[0].Controls.Count,
gridViewRow);
}
}
Смысл метода таков, что при формировании каждой последующей строки мы добавляем новую дополнительную строку. А все дополнительные её настройки – это уже всякого рода украшения.
В итоге мы получим следующее:
