【问题标题】:Cascading DropdownList inside a Gridview in ASP.NET using entity framework使用实体框架在 ASP.NET 中的 Gridview 中级联 DropdownList
【发布时间】:2014-01-09 19:44:24
【问题描述】:

我想在 GridView 控件中实现级联 DropDownList。我的代码如下:

.aspx 代码

 <asp:GridView ID="GridView1" runat="server" Width="550px"
        AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">

        <Columns>


            <asp:TemplateField HeaderText="State">
                <ItemTemplate>
                    <asp:DropDownList ID="DropDownList1"
                        AutoPostBack="true" runat="server" DataTextField="State" DataValueField="StateID" onselectedindexchanged="DropDownList1_SelectedIndexChanged">
                    </asp:DropDownList>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="City">
                <ItemTemplate>
                    <asp:DropDownList ID="DropDownList2"
                        AutoPostBack="true" runat="server" DataTextField="City" DataValueField="CityId">
                    </asp:DropDownList>
                </ItemTemplate>
            </asp:TemplateField>

代码背后:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList ddl1 = e.Row.FindControl("DropDownList1") as DropDownList;
            if (ddl1 != null)
            {
                using (var context = new ABCEntities())
                {
                    var _state= from u in context.State
                                       select new
                                       {
                                           StateId= u.StateId,
                                           State= u.State

                                       };
                    ddl1.DataSource =_state.ToList();
                    ddl1.DataValueField = "StateId";
                    ddl1.DataTextField = "State";
                    ddl1.DataBind();
                    ddl1.Items.Insert(0, new ListItem("--Select--", "0"));

                }

            }
        }
    }   



protected void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        DropDownList ddl1 = (DropDownList)sender;
        GridViewRow row = (GridViewRow)ddl1.NamingContainer;
        if (row != null)
        {
            DropDownList ddl2 = (DropDownList)row.FindControl("DropDownList2");
            ddl2.DataSource = GetDataForSecondDropDownList(Convert.ToInt32(ddl1.SelectedValue));
            ddl2.DataTextField = "CityID";
            ddl2.DataValueField = "City";
            ddl2.DataBind();
        }
    }

    public GetDataForSecondDropDownList(int ID)
    {            
        using (var context = new ABCEntities())
        {
            var _city = (from u in context.Cities
                        where u.StateID == ID
                        select new
                        {
                            CityID = u.CityID,
                            City= u.City

                        }).Distinct();
        }

        return;          // How do i return this method

    }

我遇到了如何将 StateId 传递给方法 GetDataForSecondDropDownList() 并在上面的代码中发回相关数据的问题。

请帮助我。提前谢谢你。

【问题讨论】:

    标签: c# asp.net entity-framework gridview


    【解决方案1】:

    你需要

    1. 为您的“城市”对象创建对象类型
    2. 使用返回类型为 IEnumerable 的方法声明您的方法
    3. 将您的退货放入 using 块中

    因此,为 City 对象添加一个私有类(如果需要,在您当前的代码隐藏文件中):

    private class City
    {
        public int CityID { get; set; }
        public string City { get; set; }
    
        public City(int cityID, string city)
        {
            CityID = cityID;
            City = city;
        }
    }
    

    然后修改你的方法如下:

    public IEnumerable<City> GetDataForSecondDropDownList(int ID)
    {            
        using (var context = new ABCEntities())
        {
            var _city = (from u in context.Cities
                        where u.StateID == ID
                        select new City
                        {
                            CityID = u.CityID,
                            City= u.City
    
                        }).Distinct();
    
            return _city;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2015-07-25
      相关资源
      最近更新 更多