过滤下拉列表项

本文关键字:下拉列表 过滤 | 更新日期: 2023-09-27 18:05:21

我的工作是第一次使用。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。但是,我想排除:

  • 国家代码不等于美国的任何州
  • 任何不存在存储的状态,其中isActive == true。(即在stores表中排除任何没有活动store的状态)

我的问题是:我该怎么做?这是通过数据绑定向导还是通过我的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>

过滤下拉列表项

使用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();
        }
    }