簡體   English   中英

過濾DropDownList項目

[英]Filtering DropDownList items

我是第一次在.NET中進行開發,因此對與數據源進行交互存在疑問。 我正在使用ASP.NET 4.5 Webforms,實體框架4,SQL Server Management Studio 2008。

我有一個名為“狀態”的數據庫表,該表具有三列:state_code,country_code和description。

我有另一個表稱為商店。 這是一個較大的表,但相關的列是state_id(可能的值與state_code相同)和isActive(一個布爾值,表示該商店是否處於活動狀態)。

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

  • 任何國家代碼不等於美國的州
  • 不存在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>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM