简体   繁体   English

使用C#设置ListView的数据绑定

[英]Setting up databind for a listview using c#

I'm fairly new to using entity framework and Linq. 我对使用实体框架和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. 当从页面顶部的下拉列表中选择“区域”时,我想在Web窗体中填充一个ListView。 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. 我使用EF来填充下拉菜单的选择,而我的挑战一直是在页面回发时让页面从selectedValue填充数据。 I got to the point where teh page posts back and it returns "No data was returned", my text in EmptyDataTemplate. 我到了页面发回的地步,它返回“没有数据返回”,这是我在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 DataValueField = AreaID添加到您的区域下拉列表

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;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM