【问题标题】:Use ListView control to display data but join a reference table使用 ListView 控件显示数据但加入引用表
【发布时间】:2013-12-21 19:15:37
【问题描述】:

我真的是 ASP.NET 的新手,我查看了无数教程试图弄清楚这一点,但似乎无法理解它。我可以使用 ListView 和实体框架成功地从 tbProject 输出记录,但是我想显示 refDepartment 表中的 refDepartmentValue 而不是 refDepartmentID。这是一个快速的表结构。

tbProject
-ProjectID
-refDepartmentID
-ProjectName

refDepartment
-refDepartmentID
-refDeparmentValue

我可以用 JOIN 用 SQL 写这个,但我不知道我应该把它放在哪里。我已经玩过 LINQ 了,看来这就是我要完成的方法。也许在文件后面的代码中编写 LINQ,然后将其绑定到 ListView 控件,也许?

这是 ListView 控件:

<asp:ListView runat="server" 
  DataSourceID="EntityDataSource1">



  <ItemTemplate>
    <tr style="">
      <td>
        <asp:Label ID="ProjectIDLabel" runat="server" Text='<%# Eval("ProjectID") %>' />
      </td>
      <td>
        <asp:Label ID="refDepartmentIDLabel" runat="server" 
         Text='<%# Eval("refDepartmentID") %>' />
      </td>

    </tr>
   </ItemTemplate>
   <LayoutTemplate>
   <table runat="server">
     <tr runat="server">
       <td runat="server">
         <table ID="itemPlaceholderContainer" runat="server" border="0" style="">
           <tr runat="server" style="">
             <th runat="server">
               ProjectID</th>
             <th runat="server">
               refDepartmentID</th>
            </tr>
            <tr ID="itemPlaceholder" runat="server">
            </tr>
          </table>
        </td>
      </tr>
      <tr runat="server">
        <td runat="server" style="">
        </td>
      </tr>
     </table>
    </LayoutTemplate>
   </asp:ListView>

这是我使用 EF 填充下拉列表的方式,因此您至少可以参考事物的命名方式。

// populates Departments dropdownlist
using (dbOrganizationEntities1 myEntities = new dbOrganizationEntities1())
{
    var allDepartments = from refDepartments in myEntities.refDepartments
                         select refDepartments;
    ddlDepartments.DataSource = allDepartments;
    ddlDepartments.DataValueField = "refDepartmentID";
    ddlDepartments.DataTextField = "refDepartmentValue";
    ddlDepartments.DataBind();
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: c# asp.net linq entity-framework listview


    【解决方案1】:

    免责声明,我在没有 Visual Studio 的情况下在脑海中执行此操作,因此它可能存在轻微的语法错误。如果有,请告诉我。

    您需要做两件事,首先您必须根据需要使用内部(或外部)联接将 tbProject 加入到 refDepartments 实体,具体取决于您想要的行为。一个你在 LINQ 中加入了两个表,你想创建一个新的 anonymous class 使用创建它的“select new”运算符。这个新类的成员将根据从中选择的实体的数据类型创建。

    using (dbOrganizationEntities1 myEntities = new dbOrganizationEntities1())
    {
        var allDepartments = (from tbProject in myEntities.tbProjects
                                // inner join to department lookup table
                                from refDepartments in myEntities.refDepartments.Where(x=>x.refDepartmentID == tbProject.refDepartmentID) // to do a left join instead of an inner, append .DefaultIfEmpty() after this where clause
                                // select new anon type
                                select new {
                                    refDepartmentID = tbProject.refDepartmentID,
                                    ProjectName = tbProject.ProjectName,
                                    refDepartmentValue = refDepartments.refDepartmentValue,
                                }).ToList(); // I chose to turn the result into a list to demonstrate something below, you can leave it as an enumerable.
    
    
        // you can access the properties of the anon type like so
        System.Diagnostics.Debug.Print(allDepartments[0].refDepartmentID);
        System.Diagnostics.Debug.Print(allDepartments[0].refDepartmentValue);
    
        // bind to your listview, make sure control name is accurate and ItemTemplates are defined for each data column.
        MyListView.DataSource = allDepartments;
        MyListView.DataBind();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多