Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
134.14 Кб
Скачать

Удаление строки

  • Добавьте следующий код перед Console.ReadLine();.

// Access the first element in the Orders collection.

Order ord0 = existingCust.Orders[0];

// Access the first element in the OrderDetails collection.

OrderDetail detail0 = ord0.OrderDetails[0];

// Display the order to be deleted.

Console.WriteLine

("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}",

detail0.OrderID, detail0.ProductID);

// Mark the Order Detail row for deletion from the database.

db.OrderDetails.DeleteOnSubmit(detail0);

Отправка изменений в базу данных

Последнее действие, необходимое для создания, обновления и удаления объектов, заключается в фактической отправке изменений в базу данных. Без него изменения останутся на локальном уровне и не появятся в результатах запроса.

Отправка изменений в базу данных

  1. Вставьте следующий код перед Console.ReadLine.

db.SubmitChanges();

  1. Вставьте следующий код (после SubmitChanges), чтобы показать результаты до и после отправки изменений.

Console.WriteLine("\nCustomers matching CA after update");

foreach (var c in db.Customers.Where(cust =>

cust.CustomerID.Contains("CA")))

{

Console.WriteLine("{0}, {1}, {2}",

c.CustomerID, c.CompanyName, c.Orders.Count);

}

  1. Нажмите клавишу F5 для отладки решения.

использование классов в качестве структур данных при работе на LINQ

особенности технологии WPF

Windows Presentation Foundation (WPF, кодовое название — Avalon) — система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), имеющая прямое отношение к XAML.

Особенности техноогии

В основе WPF лежит векторная система визуализации, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая Язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, макеты, двухмерную и трехмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа и оформление [1].

Графической технологией, лежащей в основе WPF является DirectX, в отличие от Windows Forms, где используется GDI/GDI+[2]. Производительность WPF выше, чем у GDI+за счёт использования аппаратного ускорения графики через DirectX.

Также существует урезанная версия CLR, называющаяся WPF/E, она же известна как Silverlight.

Использование разметки XAML

XAML представляет собой XML, в котором фактически реализованы классы .NET Framework. Так же реализована модель разделения кода и дизайна, позволяющая кооперироваться программисту и дизайнеру. Кроме того, есть встроенная поддержка стилей элементов, а сами элементы легко разделить на элементы управления второго уровня, которые в свою очередь разлагаются до уровня векторных фигур и свойств/действий. Это позволяет легко задать стиль для любого элемента, например, того же Button(кнопка).

просмотр и редактирование данных из баз данных средствами Visual Studio 2008

BindingNavigator - класс

Представляет пользовательский интерфейс для перехода и обработки для элементов управления на форме, которые привязываются к данным.

Пространство имен: System.Windows.Forms

Сборка: System.Windows.Forms (в System.Windows.Forms.dll)

Синтаксис

[ComVisibleAttribute(true)]

[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)]

public class BindingNavigator : ToolStrip,

ISupportInitialize

Элемент управления BindingNavigator представляет стандартный способ навигации и управления данными на форме.В большинстве случаев элемент управления BindingNavigator соединяется попарно с элементом управления BindingSource, чтобы обеспечивать перемещение между записями данных на форме и взаимодействовать с ними.В этих случаях свойство BindingSource устанавливается на соответствующий компонент System.Windows.Forms.BindingSource, который действует в качестве источника данных.

По умолчанию, пользовательский интерфейс элемента управления BindingNavigator включает в свой состав ряд кнопок ToolStrip, текстовых окон, а также статические текстовые элементы для наиболее общих действий, связанных с данными, таких как добавление данных, удаление данных и переход между данными.Каждый из этих элементов управления может извлекаться или устанавливаться посредством соответствующего члена элемента управления BindingNavigator.Кроме того, имеется также взаимнооднозначное соответствие членам в классе BindingSource, которые программно выполняют аналогичные функции, как это показано в следующей таблице.

Добавление элемента управления BindingNavigator на форму и его привязка к источнику данных, такому как BindingSource, будет автоматически устанавливать взаимосвязи в этой таблице.

Для настройки панели инструментов можно использовать один из следующих методов:

  • Создайте объект BindingNavigator с конструктором BindingNavigator(Boolean), который принимает логический параметр addStandardItems и устанавливает для него значение false.Затем добавьте необходимые объекты ToolStripItem в коллекцию Items.

Если требуется существенная настройка или пользовательский проект будет использоваться повторно, создайте класс из BindingNavigator и переопределите метод AddStandardItems, чтобы определить дополнительные или альтернативные стандартные элементы.

применение языка LINQ для баз данных

LINQ to DataSet упрощает и ускоряет запросы к данным, кэшированным в объекте DataSet. В особенности LINQ to DataSet упрощает создание запросов, позволяя писать их непосредственно на языке программирования, а не применять отдельный язык запросов. Это особенно полезно для разработчиков среды Visual Studio, которые теперь могут воспользоваться в своих запросах преимуществами проверки синтаксиса во время компиляции, статической типизации и поддержки технологии IntelliSense, обеспечиваемой средой Visual Studio.

Технология LINQ to DataSet также может использоваться для запросов к данным, находящимся в одном или нескольких источниках. Это удовлетворяет многим сценариям, требующим гибкости при представлении и обработке данных, таких как запросы к данным, прошедшим локальную статистическую обработку, и кэширование на среднем уровне в веб-приложениях. В частности, этот метод обработки требуется для универсальных приложений отчетности, анализа и бизнес-аналитики.

Соединение — важная операция в запросах, которые обращаются к источникам данных без доступных для навигации взаимосвязей, например к таблицам реляционной базы данных. Соединение двух источников данных представляет собой взаимосвязь объектов одного источника данных с объектами, использующими общий атрибут в другом источнике данных. Дополнительные сведения см. в разделе Общие сведения о стандартных операторах запроса.

Примеры в данном разделе демонстрируют, как использовать методы GroupJoin и Join для запроса к DataSet с использованием синтаксиса выражений запросов.

Метод FillDataSet, используемый в данных примерах, описан в разделе Загрузка данных в DataSet.

В примерах данного раздела используются таблицы Contact, Address, Product, SalesOrderHeader и SalesOrderDetail из образца базы данных AdventureWorks.

В примерах, приведенных в этом разделе, используются следующие инструкции using/Imports:

using System;

using System.Linq;

using System.Linq.Expressions;

using System.Collections.Generic;

using System.Data;

using System.Data.SqlClient;

using System.Data.Common;

using System.Globalization;

Дополнительные сведения см. в разделе Как создать проект LINQ to DataSet в среде Visual Studio.

GroupJoin

Пример

В этом примере выполняется операция GroupJoin с таблицами SalesOrderHeader и SalesOrderDetail, чтобы найти количество заказов для каждого клиента. Групповое соединение эквивалентно левому внешнему соединению, которое возвращает каждый элемент первого (левого) источника данных, даже если в другом источнике данных не имеется соответствующих элементов.

// Fill the DataSet.

DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);

var orders = ds.Tables["SalesOrderHeader"].AsEnumerable();

var details = ds.Tables["SalesOrderDetail"].AsEnumerable();

var query =

from order in orders

join detail in details

on order.Field<int>("SalesOrderID")

equals detail.Field<int>("SalesOrderID") into ords

select new

{

CustomerID =

order.Field<int>("SalesOrderID"),

ords = ords.Count()

};

foreach (var order in query)

{

Console.WriteLine("CustomerID: {0} Orders Count: {1}",

order.CustomerID,

order.ords);

}

Пример

В этом примере выполняется операция GroupJoin с таблицами Contact и SalesOrderHeader. Групповое соединение эквивалентно левому внешнему соединению, которое возвращает каждый элемент первого (левого) источника данных, даже если в другом источнике данных не имеется соответствующих элементов.

// Fill the DataSet.

DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);

DataTable contacts = ds.Tables["Contact"];

DataTable orders = ds.Tables["SalesOrderHeader"];

var query =

from contact in contacts.AsEnumerable()

join order in orders.AsEnumerable()

on contact.Field<Int32>("ContactID") equals

order.Field<Int32>("ContactID")

select new

{

ContactID = contact.Field<Int32>("ContactID"),

SalesOrderID = order.Field<Int32>("SalesOrderID"),

FirstName = contact.Field<string>("FirstName"),

Lastname = contact.Field<string>("Lastname"),

TotalDue = order.Field<decimal>("TotalDue")

};

foreach (var contact_order in query)

{

Console.WriteLine("ContactID: {0} "

+ "SalesOrderID: {1} "

+ "FirstName: {2} "

+ "Lastname: {3} "

+ "TotalDue: {4}",

contact_order.ContactID,

contact_order.SalesOrderID,

contact_order.FirstName,

contact_order.Lastname,

contact_order.TotalDue);

}

Join

Пример

В этом примере выполняется соединение таблиц SalesOrderHeader и SalesOrderDetail, чтобы получить заказы, действующие с августа.

// Fill the DataSet.

DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);

DataTable orders = ds.Tables["SalesOrderHeader"];

DataTable details = ds.Tables["SalesOrderDetail"];

var query =

from order in orders.AsEnumerable()

join detail in details.AsEnumerable()

on order.Field<int>("SalesOrderID") equals

detail.Field<int>("SalesOrderID")

where order.Field<bool>("OnlineOrderFlag") == true

&& order.Field<DateTime>("OrderDate").Month == 8

select new

{

SalesOrderID =

order.Field<int>("SalesOrderID"),

SalesOrderDetailID =

detail.Field<int>("SalesOrderDetailID"),

OrderDate =

order.Field<DateTime>("OrderDate"),

ProductID =

detail.Field<int>("ProductID")

};

foreach (var order in query)

{

Console.WriteLine("{0}\t{1}\t{2:d}\t{3}",

order.SalesOrderID,

order.SalesOrderDetailID,

order.OrderDate,

order.ProductID);

}