[英]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.