Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_redaktsia_2013.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
931.98 Кб
Скачать
  1. Редактирование данных в приложении

Редактирование строк в объекте DataTable

Чтобы изменить существующую строку в таблице DataTable, необходимо найти строку DataRow, которую требуется изменить и затем присвоить обновленные значения нужным столбцам.

Поиск строки в типизированном наборе данных по известному значению первичного ключа

Большинство приложений, получающих данные, нуждаются в доступе к отдельным записям, которые отвечают некоторым критериям. Чтобы найти конкретную строку в наборе данных по значению первичного ключа, вызовите метод Find объекта DataRowCollection, который получает указанный объект DataRow:

Чтобы найти строку в нетипизированном наборе данных по известному значению первичного ключа следует вызвать метод Find из коллекции DataRowCollection, передав первичный ключ в качестве параметра.

В следующем примере показано, как объявить новую строку с именем foundRow и присвоить ей возвращаемое значение метода Find. Если первичный ключ найден, содержимое индекса столбца 1 отображается в окне сообщения.

Язык C#

string s = "primaryKeyValue";

DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);

if (foundRow != null)

{

MessageBox.Show(foundRow[1].ToString());

}

else

{

MessageBox.Show("A row with the primary key of " + s + " could not be found");

}

Редактирование записей в типизированном наборе данных (индекс строки неизвестен)

бычно, мы не знаем индекс строки, которую необходимо изменить. В типизированных наборах применяется метод FindBy, который использует первичный ключ таблицы для поиска строки.

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

В следующем примере столбец CustomerID является первичным ключом таблицы Customers, поэтому метод FindBy генерируется как FindByCustomerID. В этом примере "ALFKI" - искомое значение первичного ключа.

NorthwindDataSet.CustomersRow customersRow =

northwindDataSet1.Customers.FindByCustomerID("ALFKI");

customersRow.CompanyName = "Updated Company Name";

customersRow.City = "Seattle";

Редактирование записей в нетипизированных наборах данных (индекс строки неизвестен)

Для обнаружения определенной строки и присвоения новых значений нужным столбцам следует использовать метод Select объекта DataTable.

В следующем примере столбец CustomerID является первичным ключом таблицы Customers, поэтому вызов метода Select и поиск по первичному ключу вернет единственную строку. Возвращаемый тип по-прежнему представляет собой массив строк DataRow, поэтому мы получаем доступ по индексу (0), или обращаемся к первой строке в массиве.

DataRow[] customerRow =

dataSet1.Tables["Customers"].Select("CustomerID = 'ALFKI'");

customerRow[0]["CompanyName"] = "Updated Company Name";

customerRow[0]["City"] = "Seattle";

Редактирование строки в DataTable по известому индексу строки в типизированном наборе

Чтобы обновить существующие записи в типизированных наборах данных (индекс строки известен) присвойте значение определенному столбцу в объекте DataRow. Типизированные наборы данных используют раннюю привязку, которая предоставляет имена таблиц и столбцов в виде свойств в режиме разработки. Результатом этого становится более легкий для чтения и записи код. В следующем примере показано обновление данных в столбцах CompanyName и City пятой записи таблицы Customers в наборе данных:

northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";

northwindDataSet1.Customers[4].City = "Seattle";

Редактирование строки в DataTable по известому индексу строки в нетипизированном наборе

Чтобы обновить существующие записи в нетипизированных наборах данных (индекс строки известен), присвойте значение определенному столбцу в объекте DataRow. Имена таблиц и столбцов нетипизированных наборов данных недоступны в режиме разработки, поэтому к ним нужно обращаться посредством их соответствующих индексов. В следующем примере показано обновление данных в первых двух столбцах пятой записи первой таблицы в Dataset1, доступ к значениям таблиц, строк и индексов коллекции элементов (столбцов): dataSet1.Tables[0].Rows[4].ItemArray[0] = "Updated Company Name"; dataSet1.Tables[0].Rows[4].ItemArray[1] = "Seattle"; В следующем примере показано, как обновлять те же данные, что и в предыдущем примере, заменяя индексы коллекции в таблице и передавая имена столбцов в виде строк. По-прежнему необходимо знать индекс строки, которую необходимо изменить: dataSet1.Tables["Customers"].Rows[4]["CompanyName"] = "Updated Company Name"; dataSet1.Tables["Customers"].Rows[4]["City"] = "Seattle";

Удаление строк из объекта DataTable

Для сохранения сведений, необходимых набору данных для обновления источника данных, используется метод Delete, который удаляет строки в таблице данных. Например, если приложение использует TableAdapter (или DataAdapter), метод адаптера Update будет удалять строки в базе данных, имеющие RowState, равный Deleted.

Если приложению не требуется отсылать обновления обратно к источнику данных, можно удалить записи, обращаясь к коллекции строк данных напрямую (Remove).

Чтобы удалить записи из таблицы данных, выполните следующие действия:

Для типизированных наборов вызовите метод Delete объекта DataRow.

Данный метод не удаляет записи физически; вместо этого он помечает записи для удаления.

Примечание. Если получено свойство count объекта DataRowCollection, в итоговом результате будут присутствовать записи, помеченные для удаления. Для получения точного количества только тех записей, которые не были помечены для удаления, можно просмотреть свойства RowState каждой записи в коллекции (записи, отмеченные для удаления, имеют RowState, равный Deleted). Также можно создать представление данных набора данных, которое выполнит фильтрацию на основе состояния строки и получит свойство count непосредственно оттуда.

В следующем примере показано, как вызывать метод Delete, помечающий как удаленную первую строку в таблице Customers:

northwindDataSet1.Customers.Rows[0].Delete();

Для нетипизированных наборов данных используйте код, аналогичный приведенному ниже:

dataSet1.Tables["Customers"].Rows[0].Delete

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]