|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Элементы-потребители данных ASP .NET 2.0
В ASP .NET появились 3 новых элемента управления для отображения табличных данных: GridView, DetailsView и FormView.
GridView
Элемент управления GridView является усовершенствованным элементом, призванным заменить DataGrid. Все сказанное о DataGrid относится к GridView, но с немного другими названиями. Так, вместо BoundColumn употребляется BoundField, а в названиях стилей вместо Item находится Row. Таким образом, любой DataGrid можно преобразовать в GridView, но не наоборот. Хотя в простейшем варианте GridView отображает такую же таблицу, он наследник не DataGrid, а CompositeDataBoundControl.
Главное преимущество GridView — автоматическое связывание с данными, благодаря чему нет необходимости писать обработчики событий, чтобы обеспечить функциональность, такую как удаление, редактирование, сортировка, разбиение на страницы при условии связывания с элементами-источниками данных. Он обеспечивает стандартную обработку подобных событий, но ее всегда можно расширить, чтобы обеспечить дополнительные возможности.
В отличие от версии 1.1, новые элементы могут работать и на мобильных устройствах.
GridView вместе с SqlDataSource появится простым перетаскиванием таблицы Users на форму:
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False" DataKeyNames="UID"
DataSourceID="SqlDataSource1"
EmptyDataText="There are no data records to display.">
<Columns>
<asp:BoundField DataField="name" HeaderText="name"
SortExpression="name" />
<asp:BoundField DataField="Comments"
HeaderText="Comments" SortExpression="Comments" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DemoBaseConnectionString1 %>"
DeleteCommand="DELETE FROM [Users] WHERE [UID] = @UID"
InsertCommand="INSERT INTO [Users] ([UID], [name], [Comments])
VALUES (@UID, @name, @Comments)"
ProviderName="<%$
ConnectionStrings:DemoBaseConnectionString1.ProviderName %>"
SelectCommand="SELECT [UID], [name], [Comments] FROM [Users]"
UpdateCommand="UPDATE [Users] SET [name] = @name, [Comments] =
@Comments WHERE [UID] = @UID">
<InsertParameters>
<asp:Parameter Name="UID" Type="Int32" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="Comments" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="Comments" Type="String" />
<asp:Parameter Name="UID" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="UID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>Установка свойства AllowSorting создает в заголовке гиперссылки, при нажатии на которые таблица будет сортироваться по выбранному полю. В этом проявляется преимущество перед DataGrid, в котором для сортировки необходимо переопределить событие SortCommand (рис. 9.1).
После повторного нажатия на заголовок таблица сортируется по этому полю в убывающем порядке.
Иногда значения в каком-либо поле могут повторяться, и нужно отсортировать значения сначала по первому полю, затем по второму. Но сортировка по умолчанию сортирует только по одному полю. Если теперь нажать мышкой на Comments, сортировка по имени пропадет.
| Имя | Comments |
|---|---|
| Burda | Одесса, ведущий кулинар |
| Burda | Редактор журнала мод |
| Bush | Вашингтон, президент |
| Bush | Буш-отец |
В таком случае поможет немного кодирования. Переопределим событие Sorting:
protected void GridView1_Sorting(object sender,
GridViewSortEventArgs e)
{
string oldExpression = GridView1.SortExpression;
string newExpression = e.SortExpression;
if (oldExpression.IndexOf(newExpression) < 0)
{
if (oldExpression.Length > 0)
e.SortExpression = oldExpression + ", " +
newExpression;
else
e.SortExpression = newExpression;
}
else
{
e.SortExpression = oldExpression;
}
}Отсортируем сначала по имени, потом по Comments:

