На заметку! Когда вы устанавливаете SortParameterName, ObjectDataSource всегда будет вызывать версию вашего метода, которая принимает выражение сортировки. Если данные не сортированы (например, когда сетка первоначально сконструирована), то ObjectDataSource просто передает пустую строку вместо выражения сортировки.
Теперь вы должны реализовать метод GetEmployees() и решить, как вы хотите выполнять сортировку. Легче всего заполнить автономный DataSet, так что вы сможете положиться на функциональность сортировки DataView. Рассмотрим пример метода GetEmployees() в компоненте базы данных, выполняющего сортировку описанным способом:
public EmployeeDetails[] GetEmployees(string sortExpression)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("GetAllEmployees", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
con.Open();
adapter.Fill(ds, "Employees");
}
catch (SqlException err)
{
// Заменить сообщение об ошибке чем-то менее подробным.
// Здесь также можно запротоколировать ошибку.
throw new ApplicationException("Data error.");
}
finally
{
con.Close();
}
// Применить сортировку.
DataView view = ds.Tables[0].DefaultView;
view.Sort = sortExpression;
// Создать коллекцию всех записей о сотрудниках.
ArrayList employees = new ArrayList();
foreach (DataRowView row in view)
{
EmployeeDetails emp = new EmployeeDetails(
(int)row["EmployeeID"], (string)row["FirstName"],
(string)row["LastName"], (string)row["TitleOfCourtesy"]);
employees.Add(emp);
}
return (EmployeeDetails[])employees.ToArray(typeof(EmployeeDetails));
}
Другой подход заключается в изменении действительного исполняемого запроса в соответствии с выражением сортировки. В результате сортировку будет выполнять база данных. Этот подход несколько сложнее, но безупречного выбора нет.
предыдущая следующая страница оглавление
438