从另一个 table 填充 SQL table 列
Populate SQL table column from another table
我有一个 jqGrid(最新的免费 jqGrid 版本)table 使用 Java REST 服务填充了来自数据库(MS SQL)的数据。 jqGrid 列之一是带有 6 个选项的下拉列表。
我的任务是创建另一个数据库 table,其中包含下拉列表值并使用外键/主键,我必须自动填充第一个 table DDL 值。
我无法理解其背后的逻辑。有人可以向我解释这个吗?我怎样才能做到这一点。我是否只从 jqGrid 发送一个 ID 并根据该 ID(1,2,..,6) 选择在 table#1 DDL 列中设置的内容(将发送的 ID 与 table 包含 DDL 值)?
我感觉我表达得不好...希望你们能理解我。
我们可以从数据库入手table。它可能看起来像
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)
)
它允许通过 Id
或 Name
解决此类 OrderStatus
table 的任何项目。 UNIQUE CONSTRAINT
不允许添加重复名称。另一个 table 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"
在相应的列中显示文本(参见 here). It required that you would have to have editoptions.value
filled with all different values from dbo.OrderStatus
. The best way to implement this would be to extend the response from the server for filling the grid with your custom data and to use beforeProcessing
to set editoptions.value
. I described the scenario in the answer。我下面会提醒你。
让我们从服务器响应看起来像
{
"rows": [{...}, {...}]
}
如果返回的数据看起来像
[{...}, {...}]
那么你应该包括包装。我建议你制作
SELECT Id,Name FROM dbo.OrderStatus
另外从dbo.Order
(SELECT * FROM dbo.Order
)制作主要的select然后你放置两者 导致服务器响应:
{
"orderStatus": [{"id":1, "name":"Pending"}, ...],
"rows": [{...}, {...}]
}
要处理 orderStatus
,您需要添加以下 beforeProcessing
,它读取 orderStatus
并设置网格 orderStatus
列的 editoptions.value
:
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");
}
}
}
以上代码未经测试,但希望能从中清楚主要思想。
我有一个 jqGrid(最新的免费 jqGrid 版本)table 使用 Java REST 服务填充了来自数据库(MS SQL)的数据。 jqGrid 列之一是带有 6 个选项的下拉列表。
我的任务是创建另一个数据库 table,其中包含下拉列表值并使用外键/主键,我必须自动填充第一个 table DDL 值。
我无法理解其背后的逻辑。有人可以向我解释这个吗?我怎样才能做到这一点。我是否只从 jqGrid 发送一个 ID 并根据该 ID(1,2,..,6) 选择在 table#1 DDL 列中设置的内容(将发送的 ID 与 table 包含 DDL 值)?
我感觉我表达得不好...希望你们能理解我。
我们可以从数据库入手table。它可能看起来像
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)
)
它允许通过 Id
或 Name
解决此类 OrderStatus
table 的任何项目。 UNIQUE CONSTRAINT
不允许添加重复名称。另一个 table 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"
在相应的列中显示文本(参见 here). It required that you would have to have editoptions.value
filled with all different values from dbo.OrderStatus
. The best way to implement this would be to extend the response from the server for filling the grid with your custom data and to use beforeProcessing
to set editoptions.value
. I described the scenario in the answer。我下面会提醒你。
让我们从服务器响应看起来像
{
"rows": [{...}, {...}]
}
如果返回的数据看起来像
[{...}, {...}]
那么你应该包括包装。我建议你制作
SELECT Id,Name FROM dbo.OrderStatus
另外从dbo.Order
(SELECT * FROM dbo.Order
)制作主要的select然后你放置两者 导致服务器响应:
{
"orderStatus": [{"id":1, "name":"Pending"}, ...],
"rows": [{...}, {...}]
}
要处理 orderStatus
,您需要添加以下 beforeProcessing
,它读取 orderStatus
并设置网格 orderStatus
列的 editoptions.value
:
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");
}
}
}
以上代码未经测试,但希望能从中清楚主要思想。