使用C#设置为数据绑定列表视图 [英] Setting up databind for a listview using c#

查看:137
本文介绍了使用C#设置为数据绑定列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是相当新的使用实体框架和LINQ。我有我想要当从DropDownList中在页面顶部选择了区域来填充表单一个ListView。这些数据将基于什么在下拉列表中选择。我用EF来填充下拉菜单的选择,我的挑战是在页面从了selectedValue当页面回填充数据。我到这种地步格兰页面回并返回无数据返回,我在EmptyDataTemplate文本。某处不会检索我的数据,所以我希望有人能告诉我什么,我做错了。

 <节类=精选的风格=文本对齐:中心;背景色:#FFF;填充:15px的>
                < ASP:标签ID =lblChooseArea=服务器文本=选择一个区域:>< / ASP:标签>
                < ASP:DropDownList的ID =AreaDropDown
                    而itemtype =Level1One.Classes.Area的AutoPostBack =真
                    =服务器DataTextField =AREANAME
                    SelectMethod =GetAreas>
                < / ASP:DropDownList的>
                < BR /><小时/>< BR />                < UL>
                        < ASP:ListView控件ID =ticketList=服务器
                            GroupItemCount =3
                            而itemtype =Level1One.Classes.Ticket>
                            < EmptyDataTemplate>
                                <表ID =表1=服务器>
                                    &所述; TR>
                                        < TD>返回无数据< / TD>
                                    < / TR>
                                < /表>
                            < / EmptyDataTemplate>
                            < EmptyItemTemplate>
                                < TD ID =TD1=服务器/>
                            < / EmptyItemTemplate>
                            < GroupTemplate>
                                < TR ID =itemPlaceholderContainer=服务器>
                                    < TD ID =itemPlaceholder=服务器>< / TD>
                                < / TR>
                            < / GroupTemplate>
                            <&ItemTemplate中GT;
                                < TD ID =TD2=服务器>
                                    <表>
                                        &所述; TR>
                                            < TD>&安培; NBSP;< / TD>
                                            &所述; TD>
                                                &所述; A HREF =ProductDetails.aspx ticketID =&下;%#:Item.TicketID%gt;中与GT;
                                                    <跨度类=产品名称>
                                                        <%#:Item.TicketSubArea%GT;
                                                    < / SPAN>
                                                &所述; / A>
                                                < BR />
                                                <跨度类=productSku,则>
                                                    < B>简介:< / B><%#:Item.Description%GT;
                                                < / SPAN>
                                                < BR />
                                            < / TD>
                                        < / TR>
                                    < /表>
                                < / TD>
                            < / ItemTemplate中>
                            <&LayoutTemplate模板GT;
                                <表ID =表2=服务器>
                                    < TR ID =TR1=服务器>
                                        < TD ID =Td3还=服务器>
                                            <表ID =groupPlaceholderContainer=服务器>
                                                < TR ID =groupPlaceholder=服务器>< / TR>
                                            < /表>
                                        < / TD>
                                    < / TR>
                                    < TR ID =TR2=服务器>< TD ID =TD4=服务器>< / TD>< / TR>
                                < /表>
                            < / LayoutTemplate模板>
                        < / ASP:的ListView>
                < / UL>            < /节>

下面是code背后:

 公共部分类TicketList:System.Web.UI.Page
{
    保护无效的Page_Load(对象发件人,EventArgs的发送)
    {
        如果(的IsPostBack)
        {            字符串dllArea = AreaDropDown.SelectedValue;
            INT dllAreaNum;            int.TryParse(dllArea,出dllAreaNum);            使用(TicketContext adrop =新TicketContext())
            {
                VAR的结果=(来自于adrop.Tickets
                              其中(a.AreaID == dllAreaNum)
                              选择新的{a.TicketSubArea,a.Description,a.TicketID})了ToList()。                ticketList.DataSource =结果;
                ticketList.DataBind();            }
}    }    公众的IQueryable<面积和GT; GetAreas()
    {
        变种DB =新Level1One.Classes.TicketContext();
        IQueryable的<面积和GT;查询= db.Areas;
        返回查询;
}
}

我的类和语境:

 使用System.Data.Entity的;命名空间Level1One.Classes
{
    公共类TicketContext:的DbContext
    {
        公共TicketContext():基地(Level1One)
        {
        }
        公共DbSet<门票>门票{搞定;组; }
        公共DbSet<面积和GT;地区{搞定;组; }
    }
}

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.ComponentModel.DataAnnotations;命名空间Level1One.Classes
{
    公共类门票
    {
        [ScaffoldColumn(假)]
        公众诠释TicketID {搞定;组; }        [必填,StringLength(100),显示(NAME =区)]
        公共字符串TicketArea {搞定;组; }        [必填,StringLength(100),显示(NAME =分区)]
        公共字符串TicketSubArea {搞定;组; }        [必填,StringLength(10000),显示(名称=说明),数据类型(DataType.MultilineText)
        公共字符串描述{搞定;组; }        公众诠释? areaID表示{搞定;组; }        公共虚拟区域面积{搞定;组; }
    }
}


解决方案

添加 DataValueField = areaID表示您所在地区的DropDownList

替换为这个

 如果(的IsPostBack)
        {            字符串dllArea = AreaDropDown.SelectedValue;
            INT dllAreaNum;            int.TryParse(dllArea,出dllAreaNum);            使用(TicketContext adrop =新TicketContext())
            {
                VAR的结果=(来自于adrop.Tickets
                              其中(a.AreaID == dllAreaNum)
                              选择新的{a.TicketSubArea,a.Description,a.TicketID})了ToList()。                ticketList.DataSource =结果;
                ticketList.DataBind();            }

使用:

 如果(的IsPostBack)
                {                    字符串dllArea = AreaDropDown.SelectedValue;
                    INT dllAreaNum;                    int.TryParse(dllArea,出dllAreaNum);                       IQueryable的<门票>结果= getTicketbyArea(dllAreaNum)
                        ticketList.DataSource = result.ToList();
                        ticketList.DataBind();
        }
   }

删除此:

 使用(TicketContext adrop =新TicketContext())
        {
            VAR的结果=(来自于adrop.Tickets
                          其中(a.AreaID == dllAreaNum)
                          选择新的{a.TicketSubArea,a.Description,a.TicketID})了ToList()。            ticketList.DataSource =结果;
            ticketList.DataBind();        }

此方法添加到您的code,你会在它呼吁在页面加载。

 公开的IQueryable<门票> getTicketbyArea(INT dllAreaNum)
{
     VAR _db =新TicketContext();     VAR的查询= _db.Tickets
                    。凡(X => x.AreaID == dllAreaNum)。选择(X => X)
                  返回查询;}

I'm fairly new to using entity framework and Linq. I have a ListView in a webform that I want to populate when an "area" is chosen from the dropdownlist at the top of the page. The data will be based on what is chosen in the dropdown. I used EF to populate the choices for the dropdown and my challenge has been to have the page populate the data from the selectedValue when the page posts back. I got to the point where teh page posts back and it returns "No data was returned", my text in EmptyDataTemplate. Somewhere it is not retrieving my data so I'm hoping someone can tell me what I'm doing wrong.

<section class="featured" style="text-align:center; background-color: #fff; padding:15px">
                <asp:Label ID="lblChooseArea" runat="server" Text="Choose an area: "></asp:Label>
                <asp:DropDownList ID="AreaDropDown" 
                    ItemType="Level1One.Classes.Area" AutoPostBack="true"
                    runat="server" DataTextField="AreaName"
                    SelectMethod="GetAreas" >                  
                </asp:DropDownList>
                <br /><hr /><br />

                <ul> 
                        <asp:ListView ID="ticketList" runat="server"                              
                            GroupItemCount="3"  
                            ItemType="Level1One.Classes.Ticket" >                            
                            <EmptyDataTemplate>      
                                <table id="Table1" runat="server" >        
                                    <tr>          
                                        <td>No data was returned.</td>        
                                    </tr>     
                                </table>  
                            </EmptyDataTemplate>  
                            <EmptyItemTemplate>     
                                <td id="Td1" runat="server" />  
                            </EmptyItemTemplate>  
                            <GroupTemplate>    
                                <tr ID="itemPlaceholderContainer" runat="server">      
                                    <td ID="itemPlaceholder" runat="server"></td>    
                                </tr>  
                            </GroupTemplate>  
                            <ItemTemplate>    
                                <td id="Td2" runat="server">      
                                    <table>        
                                        <tr>          
                                            <td>&nbsp;</td>                                            
                                            <td>
                                                <a href="ProductDetails.aspx?ticketID=<%#:Item.TicketID%>">
                                                    <span class="ProductName">
                                                        <%#:Item.TicketSubArea%>
                                                    </span>
                                                </a>            
                                                <br />
                                                <span class="ProductPrice">           
                                                    <b>Description: </b><%#:Item.Description%>
                                                </span>
                                                <br />            
                                            </td>        
                                        </tr>      
                                    </table>    
                                </td>  
                            </ItemTemplate>  
                            <LayoutTemplate>    
                                <table id="Table2" runat="server">      
                                    <tr id="Tr1" runat="server">        
                                        <td id="Td3" runat="server">          
                                            <table ID="groupPlaceholderContainer" runat="server">            
                                                <tr ID="groupPlaceholder" runat="server"></tr>          
                                            </table>        
                                        </td>      
                                    </tr>      
                                    <tr id="Tr2" runat="server"><td id="Td4" runat="server"></td></tr>    
                                </table>  
                            </LayoutTemplate>
                        </asp:ListView>
                </ul>

            </section>

Here is the code behind:

public partial class TicketList : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {

            string dllArea = AreaDropDown.SelectedValue;
            int dllAreaNum;

            int.TryParse(dllArea, out dllAreaNum);

            using (TicketContext adrop = new TicketContext())
            {
                var result = (from a in adrop.Tickets
                              where (a.AreaID == dllAreaNum)
                              select new { a.TicketSubArea, a.Description, a.TicketID }).ToList();

                ticketList.DataSource = result;
                ticketList.DataBind();

            }
}   

    }        

    public IQueryable<Area> GetAreas()
    {
        var db = new Level1One.Classes.TicketContext();
        IQueryable<Area> query = db.Areas;
        return query;
}
}

My classes and Context:

using System.Data.Entity;

namespace Level1One.Classes
{
    public class TicketContext : DbContext
    {
        public TicketContext() : base("Level1One")
        {
        }
        public DbSet<Ticket> Tickets { get; set; }
        public DbSet<Area> Areas { get; set; }
    }
}

.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace Level1One.Classes
{
    public class Ticket
    {
        [ScaffoldColumn(false)]
        public int TicketID { get; set; }

        [Required, StringLength(100), Display(Name = "Area")]
        public string TicketArea { get; set; }

        [Required, StringLength(100), Display(Name = "SubArea")]
        public string TicketSubArea { get; set; }

        [Required, StringLength(10000), Display(Name = "Description"), DataType(DataType.MultilineText)]
        public string Description { get; set; }

        public int? AreaID { get; set; }

        public virtual Area Area { get; set; }
    }
}

解决方案

Add a DataValueField = AreaID to your area dropdownlist

Replace this with

 if (IsPostBack)
        {

            string dllArea = AreaDropDown.SelectedValue;
            int dllAreaNum;

            int.TryParse(dllArea, out dllAreaNum);

            using (TicketContext adrop = new TicketContext())
            {
                var result = (from a in adrop.Tickets
                              where (a.AreaID == dllAreaNum)
                              select new { a.TicketSubArea, a.Description, a.TicketID }).ToList();

                ticketList.DataSource = result;
                ticketList.DataBind();

            }

With:

                if (IsPostBack)
                {

                    string dllArea = AreaDropDown.SelectedValue;
                    int dllAreaNum;

                    int.TryParse(dllArea, out dllAreaNum);

                       IQueryable<Ticket> result = getTicketbyArea(dllAreaNum)


                        ticketList.DataSource = result.ToList();
                        ticketList.DataBind();
        }
   }

Delete this:

        using (TicketContext adrop = new TicketContext())
        {
            var result = (from a in adrop.Tickets
                          where (a.AreaID == dllAreaNum)
                          select new { a.TicketSubArea, a.Description, a.TicketID }).ToList();

            ticketList.DataSource = result;
            ticketList.DataBind();

        }

Add this method to your code you will call on it on page load.

public IQueryable<Ticket> getTicketbyArea(int dllAreaNum)
{
     var _db = new TicketContext();

     var query = _db.Tickets
                    .Where(x => x.AreaID== dllAreaNum).Select(x =>x)
                  return query;

}

这篇关于使用C#设置为数据绑定列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆