如何填充一个复选框:c#与T-SQL

本文关键字:复选框 T-SQL 一个 何填充 填充 | 更新日期: 2023-09-27 18:16:08

很抱歉R101的问题。

我有一个SQL Server 2008表的项目列表(itemID, Title)。我有另一个表与框(boxID, Title)。然后,我有一个查找表,用于标识哪些项放入哪些框。

列出所有带有复选框的项的最佳方法是什么?复选框显示哪些项根据所选的boxID在框中?

也许T-SQL语句会比复杂的c#数据表更好。我已经试过几次了,但都没有得到正确的结果。

EDIT:对不起,我没有说清楚。我需要在每个项目旁边提供一个复选框的所有项目的列表。我想要复选框。检查查找表中boxID旁边有一个相等的项目ID的任何项目。

结果应该有理想的itemID, itemName和布尔列,以显示是否选中复选框。

这个想法是当'box'被更新时,项目可以被修改等

如何填充一个复选框:c#与T-SQL

我想你想要两样东西:

1)所有项目的列表

2)盒子里所有项目的列表

你可以通过几种方式做到这一点(我猜你的表的结构在这里-我猜ItemBox是链接表)

a)选择所有项目,然后选择框中所有项目的列表:

SELECT I.ItemID,
       I.Title,
       B.BoxId,
       B.Title
FROM   Item I
INNER JOIN ItemBox IB ON (I.ItemID = IB.ItemID)
INNER JOIN Box B ON (IB.BoxID = B.BoxID)
ORDER BY B.Title, I.Title   

应该给你所有的项目和他们的盒子。

然后,您可以显示表单中所有项目的列表,以及框id的列表(只是简单地从每个表中选择)。

如果您缓存上述查询的结果(例如在字典中,BoxItem字典中),那么您可以非常简单地根据所选的Box查找项目。

b)您可以在每次选中一个框时运行查询:

SELECT I.ItemID,
       I.Title,
       B.BoxId,
       B.Title
FROM   Item I
INNER JOIN ItemBox IB ON (I.ItemID = IB.ItemID)
INNER JOIN Box B ON (IB.BoxID = B.BoxID)
WHERE B.Id = @selected_boxid
ORDER BY B.Title, I.Title   

并相应地更新

你需要运行查询的例子,绑定到各种控件等?

这是一个版本,应该根据你的评论做你想要的:

SELECT I.ItemID,
      I.Title,
        CASE 
           WHEN IB.ItemID IS NULL THEN 0
           ELSE 1
         END AS ItemIsInBox

FROM   Item I
LEFT OUTER JOIN ItemBox IB ON (I.ItemID = IB.ItemID);

下面是我修复重复条目的方法:

SELECT DISTINCT TOP (100) PERCENT I.itemID, I.Title, CASE WHEN IB.BoxID = @boxID THEN 1 ELSE 0 END AS ItemIsInBox 
FROM Item AS I 
LEFT OUTER JOIN ItemBox AS IB ON I.itemID = IB.itemID AND **IB.BoxID = @boxID**
ORDER BY I.itemID

觉得值得分享。谢谢你的帮助。是你们帮助我来到这里的。

最好有第二个表链接框ID到项目ID,否则你必须确保在两个表标题是唯一的。

对于你的问题,我冒昧地:

SELECT ItemId, Title FROM Table1 WHERE Title IN (SELECT Title FROM Table2 WHERE BoxId = @boxId)