过滤DropDownList项

时间:2015-07-29 20:43:41

标签: c# asp.net sql-server entity-framework

我是第一次在.NET上开发我的工作,我有一个关于与数据源交互的问题。我正在使用ASP.NET 4.5 Webforms,Entity Framework 4,SQL Server Management Studio 2008。

我有一个名为States的数据库表,有三列:state_code,country_code和description。

我有另一张名为Stores的桌子。这是一个更大的表,但相关列是state_id(与state_code相同的可能值)和isActive,一个布尔值,表示该存储是否处于活动状态。

我想用States表中的state_code列填充DropDownList。但是,我想排除:

  • country_code不等于USA的任何州
  • 任何没有商店isActive == true的州。 (即在商店表中排除没有活动商店的任何州)

我的问题是:我该怎么做呢?这是通过Databind向导还是我的EDM类完成的?在代码隐藏?我只需要在正确的逻辑方向上轻推一下。如果我能进一步澄清,请告诉我。

这是我目前为DropDownList提供的所有代码:

 <asp:DropDownList ID="DropDownList1" runat="server" 
        OnSelectedIndexChanged="ddl_SelectedIndexChanged" DataSourceID="StateStoreInfo" 
        DataTextField="state_code" DataValueField="state_code">
    </asp:DropDownList>
  <asp:EntityDataSource ID="StateStoreInfo" runat="server" 
        ConnectionString="name=DBWebEntities" 
        DefaultContainerName="DBWebEntities" EnableFlattening="False" 
        EntitySetName="States" Select="it.[state_code]">
  </asp:EntityDataSource>

1 个答案:

答案 0 :(得分:0)

使用LINQ,代码看起来像这样,_repository是来自EF的数据源:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            PopulateStates();
        }
    }

    private void PopulateStates()
    {
        var statesNotInUS = (from s in _repository
            where s.CountryCode != "USA"
            select s).ToList();

        StateDropDownList.DataSource = statesNotInUS;
        StateDropDownList.DataBind();
    }

您可以根据需要编辑LINQ查询以按其他条件进行过滤。

编辑: 通常,您对数据库的服务调用将如下所示:

    public List<State> GetStates()
    {
        using (var db = new DbContext(ConfigurationManager.ConnectionStrings["DefaultConnection"]))
        {
            return db.States.ToList();
        }
    }