|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Элементы-потребители данных. Data-Bound Controls
Добавим в эту форму возможность сортировки по столбцам. DataGrid поддерживает свойство AllowSorting. Но это только потенциальная возможность сортировки, так как сам элемент сортировать не может, это должен обеспечить программист. При AllowSorting = True в заголовке выводятся гиперссылки, при нажатии на которые вызывается событие SortCommand. Так как нет автогенерации, в описание BoundColumn нужно вставить SortExpression:
<asp:BoundColumn DataField="name" FooterText="Name"
HeaderText="Фамилия" SortExpression="name">
</asp:BoundColumn>Метод-обработчик события SortCommand принимает параметр типа DataGridSortCommandEventArgs, в свойстве SortExpression которого содержится строка — выражение сортировки SortExpression. Необходимо использовать это выражение для сортировки данных, полученных из источника данных
protected void DataGrid2_SortCommand(object source, DataGridSortCommandEventArgs e)
{
ViewState["sort"] = e.SortExpression;
bindData();
}где bindData() вынесен в отдельную функцию и вызывается также из Page_Load:
private void bindData()
{
String xmlFilename = Server.MapPath("") + "\\nobel.xml";
DataSet newDataSet = new DataSet();
newDataSet.ReadXml(xmlFilename);
if (ViewState["sort"] != null)
newDataSet.Tables[3].DefaultView.Sort =
(string)ViewState["sort"];
DataTable newDataTable = newDataSet.Tables[3];
DataGrid2.DataSource = newDataTable;
DataGrid2.DataBind();
}
void Page_Load()
{
if (!IsPostBack)
bindData();
}| Фамилия | Страна | Год | Произведение |
|---|---|---|---|
| Romain Rollan | France | 1915 | "Jean-Cristophe" |
| George Bernard Shaw | Great Britain | 1925 | |
| Boris Pasternak | Russia | 1958 | "Doctor Zhivago" |
| Gabriel Garsia Marquez | Columbia | 1982 | "100 years of solitude" |
| Name | Country | Year won | Work |
DataGrid поддерживает возможность разбиения на страницы, но для этого тоже приходится писать код обработчиков событий. В WebMatrix имеются шаблоны таких страниц. С появлением GridView такую технику можно считать устаревшей, так как GridView позволяет делать все это с помощью одного только декларативного связывания.
Покажем возможность удаления, обновления и редактирования данных в DataGrid с помощью SqlDataSource.
Создайте на сервере SQL в базе DemoBase таблицу Users с тремя полями:
| Column Name | Data Type | Allow Nulls |
|---|---|---|
| UID | int | |
| Name | varchar(50) | |
| Comments | varchar(250) | + |
| IsRegistered | bit | + |
Поле UID — автоинкрементное. Поэтому операция INSERT не будет требовать задания его значения. Конечно, это первичный ключ. В таблице свойств найдите IdentitySpecification, раскройте его и выберите ( IsIdentity ).
Будем работать с таблицей с помощью трех процедур.
CREATE PROCEDURE dbo.SelectUsers ( @Col INT = 0 ) AS IF @Col = 0 SELECT * FROM Users ELSE IF @Col = 1 SELECT * FROM Users ORDER BY NAME RETURN
Процедура EditUser будет использоваться для вставки записей, если @UID=0, и для обновления в противном случае:
CREATE PROCEDURE dbo.EditUser ( @UID int = 0, @Name varchar(50), @Comments varchar(250), @Registered bit ) AS IF @UID = 0 INSERT INTO Users(Name, Comments, IsRegistered) VALUES(@Name, @Comments, @Registered) ELSE UPDATE Users SET Name = @Name, Comments = @Comments, IsRegistered = @Registered WHERE UID = @UID RETURN
Процедура для удаления записей.
CREATE PROCEDURE dbo.DeleteUser ( @UID int ) AS DELETE FROM Users WHERE UID = @UID RETURN
На форме будет находиться, кроме DataGrid, два элемента редактирования — NameTextBox, а также CommentTextBox и кнопка Add. Для наших тайных целей добавим элемент управления типа HiddenField. Эти цели — хранить id текущего элемента и передавать его SqlDataSource.
