【问题标题】:Dynamic Data: how to filter dropdown for foreign key on edit page动态数据:如何在编辑页面上过滤外键的下拉列表
【发布时间】:2011-01-25 00:45:42
【问题描述】:

使用 Linq-to-SQL 和动态数据。

在动态数据编辑屏幕上,下拉列表列出了外键的可能值。

我需要过滤此下拉列表中列出的值,最好在 linq-to-sql 查询中添加 where 子句。

有什么想法吗?

【问题讨论】:

    标签: .net linq-to-sql dynamic-data


    【解决方案1】:

    我将构建一个作为 Web 用户控件的自定义字段模板,并使用 UIHintAttribute 在元数据中引用它。注意:您必须构建一个标准版本(通常是超链接)和一个 _Edit 版本(通常是下拉菜单)。

    【讨论】:

      【解决方案2】:

      我想你已经解决了你的问题,但我想注册我的解决方案,以防万一它可以帮助别人!

      我按照你建议的路径,编辑 ForeignKey_Edit.ascx.cs。在 PopulateListControl(DropDownList1) 行之后,我调用了一个方法 RemoveResultsFromOtherUsers()。

      方法如下:

          private void RemoveResultsFromOtherUsers()
          {
              using (var db = new FinWeb3.DynamicData.FinWebDBDataContext())
              {
                  var data = db.GetTable(this.Column.Provider.ColumnType);
                  var removableItems = new List<ListItem>();
      
                  foreach (var item in data)
                  {
                      var dbItem = item as IDbEntity;
      
                      if (dbItem.UserName != this.Context.User.Identity.Name)
                      {
                          removableItems.Add(
                              DropDownList1.Items.FindByValue(dbItem.Id.ToString()));
                      }
                  }
      
                  foreach (var item in removableItems)
                  {
                      DropDownList1.Items.Remove(item);
                  }
              }
          }
      

      IDbEntity 是我所有的 linq to sql 类都实现的接口。此接口具有属性 Id 和 UserName。在这里,我的意图是删除当前经过身份验证的用户未注册的结果。

      感谢您的问题和解决方案!

      【讨论】:

        【解决方案3】:

        好吧,我找到了一个地方来定制这个,虽然我还没有找到一种方法来覆盖或扩展 linq 查询以加载数据:

        在文件 \DynamicData\FieldTemplates\ForeignKey_Edit.ascx.cs(根据默认位置)中,在 Page_Load 方法中进行以下调用:

        PopulateListControl(DropDownList1);
        

        这可以完全替换为您自己的代码。 就我而言,我首先检查了当前表是否实现了我定义的自定义接口。 如果是,则使用它来获取绑定下拉列表的数据,否则将控制权传递给 PopulateListControl。

        使用 Reflector,看来 PopulateListControl 最终使用 MetaTable.GetQuery() 来获取表的默认列表查询。 本来会很好,而不是……但现在继续做其他事情!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多