ОБНОВИТЬ/УДАЛИТЬ строку в ПРОСМОТР из нескольких таблиц SQL Server/Visual Studio

В: Я создал представление, состоящее из нескольких таблиц с первичными ключами. Я использую GridView в ASP.NET для ОБНОВЛЕНИЯ и УДАЛЕНИЯ строки в базе данных. Эта строка состоит из двух разных таблиц. Как мне ОБНОВИТЬ и УДАЛИТЬ его с помощью GridView в ASP.NET? Мне трудно понять, потому что при каждой попытке SQL Server говорит: «Невозможно обновить представление, потому что он обращается к нескольким таблицам».

Оказывается, вы не можете автоматически генерировать операторы UPDATE и DELETE в «Выборе источника данных» GridView, когда VIEW состоит из нескольких таблиц.

Пожалуйста, помогите мне, ребята :(

    CREATE VIEW [dbo].[viewProcedureWithPrice]
    AS
    SELECT        dbo.[PROCEDURE].ProcedureID, dbo.[PROCEDURE].Name, dbo.[PROCEDURE].Type, dbo.[PROCEDURE].Status, dbo.PRICE_HISTORY.Price, 
                             dbo.PRICE_HISTORY.EffectivityDate
    FROM            dbo.[PROCEDURE] INNER JOIN
                             dbo.PRICE_HISTORY ON dbo.[PROCEDURE].ProcedureID = dbo.PRICE_HISTORY.ProcedureID

    GO

CREATE TABLE [dbo].[PROCEDURE](
    [ProcedureID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](100) NULL,
    [Type] [varchar](100) NULL,
    [Status] [varchar](20) NULL,
 CONSTRAINT [PK_PROCEDURE] PRIMARY KEY CLUSTERED 
(
    [ProcedureID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[PRICE_HISTORY](
    [HistoryID] [int] IDENTITY(1,1) NOT NULL,
    [ProcedureID] [int] NULL,
    [Price] [decimal](10, 2) NULL,
    [EffectivityDate] [date] NULL,
 CONSTRAINT [PK_PRICE_HISTORY] PRIMARY KEY CLUSTERED 
(
    [HistoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[PRICE_HISTORY]  WITH CHECK ADD  CONSTRAINT [FK_PRICE_HISTORY_PROCEDURE] FOREIGN KEY([ProcedureID])
REFERENCES [dbo].[PROCEDURE] ([ProcedureID])
GO

ALTER TABLE [dbo].[PRICE_HISTORY] CHECK CONSTRAINT [FK_PRICE_HISTORY_PROCEDURE]
GO

person Daniel Barga    schedule 28.09.2013    source источник
comment
Этот подход является старомодным, но вы всегда можете использовать объект ObjectDataSource, он позволяет вам углубиться в свои объекты и выбрать конкретную таблицу для этого oDS, что, в свою очередь, позволит вам создать необходимые операторы CRUD для автоматической обработки основных Функция создания-чтения-обновления-удаления (CRUD).   -  person    schedule 28.09.2013


Ответы (1)


Если я понимаю вопрос, то я добавил свою собственную кнопку удаления в строку с другим именем команды, скажем, «MyDelete» (возможно, добавьте соответствующий аргумент команды для идентификации строки или использования DataKeys). Перехватите его в событии GridView_RowCommand и выполните там удаление вручную.

Может быть, есть лучший способ, но это работает.

Я должен был бы увидеть код, чтобы углубиться в детали.

person Steve    schedule 02.10.2013