簡體   English   中英

樞紐數據庫表的一部分以使用LINQ顯示在GridView中

[英]Pivot part of a DB table to display in a GridView Using LINQ

我正在構建一個ASP.NET Web窗體應用程序,並且有一個用戶在其中輸入一些間隔的窗體。 他可以輸入任意數量的時間間隔,並將其存儲在數據庫中的表中,如下所示:

Employee Rank --- SalesMin --- SalesMax --- Pay
Admin ------------- 90 --------- 100 ------ 100 -- BUTTON
Admin ------------- 101 -------- 110 ------ 200 -- BUTTON
Admin ------------- 111 -------- 120 ------ 300 -- BUTTON
Manager ----------- 90 --------- 100 ------ 200 -- BUTTON
Manager ----------- 101 -------- 110 ------ 300 -- BUTTON
Manager ----------- 111 -------- 120 ------ 400 -- BUTTON
SalesPerson ------- 90 --------- 100 ------ 50 --- BUTTON
SalesPerson ------- 101 -------- 110 ------ 100 -- BUTTON
SalesPerson ------- 111 -------- 120 ------ 200 -- BUTTON

因此,根據某種產品的銷售數量,將向每個員工級別分配應得的薪水。 用戶可以輸入任意數量的間隔,每個新間隔都存儲在新行中。 在此示例中,有3個不同的時間間隔,但它可以是用戶想要的4、2、5。 間隔數ir始終等於所有等級。 這就是它存儲在數據庫中的方式。

但! 輸入間隔和其他所有內容后,用戶需要更改已支付的金額,這就是按鈕的功能(最初,pay的值為空)。

我需要做的是:將此表保留在數據庫中,將其顯示在GridView中,如下所示:

Employee Rank --- Interval1 --- Interval2 --- Interval3
Admin ------------- 100 --------- 200 ---------- 300 ----- button
Manager ----------- 200 --------- 300 ---------- 400 ----- button
Admin ------------- 50 ---------- 100 ---------- 200 ----- button

我需要獲取與時間間隔相對應的行數,並將它們轉換為列,然后使用按鈕編輯工資值。 然后,我需要將其還原,並將更改保存回數據庫表(第一個)。

我似乎找不到辦法。 有辦法嗎? 謝謝。

PS:不確定這是否相關,但是第一個表中存儲的大多數是其他表中的FK,然后我使用LINQ to Entities將它們放在一起,並且有一個Class用於存儲該列表污染的對象。

對於PIVOT這似乎是一件不錯的小工作:

;WITH CTE AS (
SELECT [Employee Rank], [Pay], 'Interval' + CAST(ROW_NUMBER() OVER(PARTITION BY [Employee Rank] ORDER BY [Pay] ASC) AS VARCHAR) AS [Interval]
FROM Table1)
SELECT *
FROM CTE
PIVOT(MAX([Pay]) FOR [Interval] IN ([Interval1],[Interval2],[Interval3])) PIV

編輯:有大量的在線示例,向您展示如何使其動態化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM