将关系查询结果放入组合框中

时间:2010-12-29 11:57:05

标签: c# sql

我的数据库中有以下列的3个表:
工具:toolid,tool_name
facet:facetid,facet_name
tool_facet:tf_id,tf_toolid,tf_facetid

第三个表格包含一系列工具及其方面:
例如
1 tid2 fid3
2 tid2 fid4
3 tid3 fid2

其中tid2和fid3分别是工具和构面的ID。

在另一个组合框中,用户选择了一个特定的工具。我现在想在另一个组合框中显示适用于此工具的构面。

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:1)

当用户在第一个组合框中进行选择时,你只需要重新填充第二个组合框的项目吗?

每次用户进行选择时,您可能不希望重新查询数据库,因此需要在内存中保存所有在toolid上键入的有效构面的结构。

编辑基于Dave评论的一些进一步细节:

假设您已经有一些代码设置来查询数据库,您希望执行一个查询(或多个查询),它们会将相关数据保留在缓存中,并在连接到应用程序初始化后执行此操作。数据库。您可以创建两个词典来保存工具和构面数据。例如:

Dictionary<int, string> _tools = new Dictionary<int, string>();
Dictionary<int, string> _facets = new Dictionary<int, string>();

然后是第三个基本上保存tool_facet中数据的结构:

Dictionary<int, List<int>> _tool_facets = new Dictionary<int, List<int>>();

这些基本上会为您提供表的内存副本,您可以非常快速地枚举这些表来填充组合框。你会想要用包含ID和描述的东西填充组合框,这样的事情会这样:

class ComboBoxIntItem
{
  private readonly int _id;
  private readonly string _name;
  public ComboBoxIntItem(int id, string name)
  {
    _id = id;
    _name = name;
  }
  public override string ToString()
  {
    return _name;
  }
  public int GetId()
  {
    return _id;
  }
}

我在这里假设你需要知道用户选择的工具和方面ID。如果您只关心名称,那么您可以使用这样的单一结构:

Dictionary<string, List<string>> _tool_facets = new Dictionary<string, List<string>>();

答案 1 :(得分:1)

如果我的其他答案中的所有内容都听起来像是很多不必要的工作,那么您还可以查看使用.NET控件获得的数据绑定功能。说实话,我不是粉丝,而是喜欢按照我的其他答案“手工”做到这一点。为什么?好吧,我觉得你有更多的控制权和UI代码与数据库的良好分离。使用数据绑定方法对于小型应用程序是可以的,但根据我的经验,它对于大型应用程序来说非常混乱。