簡體   English   中英

從另一個表填充SQL表列

[英]Populate SQL table column from another table

我有一個jqGrid(最新的免費jqGrid版本)表,使用Java REST服務填充了來自數據庫(MS SQL)的數據。 jqGrid列之一是其帶有6個選項的下拉列表。

我的任務是創建另一個包含下拉列表值的數據庫表,並使用外鍵/主鍵自動填充第一個表的DDL值。

我無法理解其背后的邏輯。 有人可以向我解釋一下嗎? 我怎樣才能做到這一點。 我是否僅從jqGrid發送一個ID,並根據該ID(1,2,..,6)選擇在表#1 DDL列中設置的內容(將發送的ID與包含DDL值的表的ID進行比較)?

我感到自己表現得不好……希望你們能理解我。

我們可以從數據庫表開始。 看起來像

CREATE TABLE dbo.OrderStatus (
    Id int IDENTITY NOT NULL,
    Name nvarchar(100) NOT NULL,
    CONSTRAINT PK_LT_OrderStatus PRIMARY KEY CLUSTERED (Id),
    CONSTRAINT UC_LT_OrderStatus_Name UNIQUE NONCLUSTERED (Name)
)

它允許通過IdName尋址此類OrderStatus表的任何Item。 UNIQUE CONSTRAINT不允許添加名稱重復項。 另一個表Order可以有列

CREATE TABLE dbo.Order (
    Id int IDENTITY NOT NULL,
    OrderStatusId int NOT NULL,
    ...
)

ALTER TABLE dbo.Order  WITH CHECK ADD  CONSTRAINT FK_Order_OrderStatus
FOREIGN KEY(OrderStatusId) REFERENCES dbo.OrderStatus (Id)

在使用數據填充網格期間,您有兩個主要選項:在數據中使用OrderStatusId或使用dbo.OrderStatus中的相應Name

SELECT Id,OrderStatusId, ...  FROM dbo.Order

要么

SELECT Id,os.Name AS OrderStatus, ...
FROM dbo.Order AS o
    INNER JOIN dbo.OrderStatus AS os ON os.Id=o.OrderStatusId

如果決定用ID( OrderStatusId值)填充網格,則必須使用formatter: "select"以在相應的列中顯示文本(請參見此處 )。 它要求您必須用editoptions.value所有不同的值填充dbo.OrderStatus 實現此目的的最佳方法是擴展服務器的響應,以使用自定義數據填充網格,並使用beforeProcessing設置editoptions.value 我在答案中描述了這種情況。 我會在下面提醒您。

讓我們從服務器的響應看起來像

{
    "rows": [{...}, {...}]
}

如果返回的數據看起來像

[{...}, {...}]

那么您應該包括包裝紙。 我建議你

SELECT Id,Name FROM dbo.OrderStatus

除了dbo.OrderSELECT * FROM dbo.Order )中進行主要選擇外, dbo.Order 這兩個結果都放入服務器響應中:

{
    "orderStatus": [{"id":1, "name":"Pending"}, ...],
    "rows": [{...}, {...}]
}

要處理orderStatus您需要添加以下beforeProcessing ,其讀取orderStatus並設置editoptions.valueorderStatus列的orderStatus

beforeProcessing: function (response) {
    var $self = $(this), orderStatus = response.orderStatus, i, values = "";
    if (orderStatus != null && orderStatus.length > 0) {
        for (i = 0; i < orderStatus.length; i++) {
            if (values.length > 0) {
                values += ";";
            }
            values += orderStatus[i].id + ":" + orderStatus[i].name;
        }
        $self.jqGrid("setColProp", "orderStatus", {
            editoptions {
                value: values
            }
        });
        if (this.ftoolbar) { // filter toolbar exist
            $self.jqGrid("destroyFilterToolbar");
            $self.jqGrid("filterToolbar");
        }
    }
}

上面的代碼未經測試,但我希望主要思想應該從中明確。

暫無
暫無

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

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