簡體   English   中英

數據源是無效的類型。 它必須是IListSource,IEnumerable或IDataSource

[英]Data source is an invalid type. It must be either an IListSource, IEnumerable, or IDataSource

為大學導師建立時間表系統。 我編寫了一個LINQ查詢,該查詢在單擊按鈕時運行,我想返回gridview中的可用插槽。 由於查詢返回匿名類型,因此數據綁定將在標題中引發錯誤。 我已經在這里尋找解決方法,但是查詢在控件內(這里的按鈕)沒有什么地方,所以我不確定如何進行更改。

表格:

CREATE TABLE [dbo].[Sessions] (
[sessionID]              INT           IDENTITY (1, 1) NOT NULL,
[create_date]            DATETIME      NOT NULL,
[last_update_date]       DATETIME      NOT NULL,
[tutorCWID]              INT           NOT NULL,
[semesterID]             INT           NOT NULL,
[session_date]           DATE          NOT NULL,
[session_start_time]     TIME (7)      NOT NULL,
[session_end_time]       NCHAR (10)    NOT NULL,
[session_bookings]       INT           NOT NULL,
[session_group_size]     INT           NOT NULL,
[session_student_report] VARCHAR (500) NULL,
[session_tutor_report]   VARCHAR (500) NULL,
[session_documents]      VARCHAR (100) NULL,
CONSTRAINT [PK_Session] PRIMARY KEY CLUSTERED ([sessionID] ASC),
CONSTRAINT [FK_Session_UserProfileTutor] FOREIGN KEY ([tutorCWID])            REFERENCES [dbo].[UserProfiles] ([userCWID]),
CONSTRAINT [FK_Session_Semester] FOREIGN KEY ([semesterID]) REFERENCES     [dbo].[Semesters] ([semesterID]));

CREATE TABLE [dbo].[UserProfiles] (
[userCWID]     INT           NOT NULL,
[first_name]   VARCHAR (50)  NOT NULL,
[last_name]    VARCHAR (50)  NOT NULL,
[email]        VARCHAR (150) NOT NULL,
[phone_mobile] NUMERIC (18)  NULL,
[phone_work]   NUMERIC (18)  NULL,
[status]       NCHAR (10)    NOT NULL,
[password]     VARCHAR (50)  NOT NULL,
[user_typeID]  INT           NOT NULL,
[ImareUrl]     VARCHAR (50)  NULL,
CONSTRAINT [PK_Tutor] PRIMARY KEY CLUSTERED ([userCWID] ASC),
CONSTRAINT [FK_UserProfile_UserType] FOREIGN KEY ([user_typeID]) REFERENCES [dbo].[UserTypes] ([user_typeID]));

CREATE TABLE [dbo].[UserProfiles_Courses] (
[tutorCWID] INT            NOT NULL,
[courseID]  VARCHAR (50)   NOT NULL,
[note]      NVARCHAR (100) NULL,
CONSTRAINT [PK_UserProfiles_Courses] PRIMARY KEY CLUSTERED ([tutorCWID] ASC, [courseID] ASC),
CONSTRAINT [FK_UserProfiles_Courses_Courses] FOREIGN KEY ([courseID]) REFERENCES [dbo].[Courses] ([courseID]),
CONSTRAINT [FK_UserProfiles_Courses_UserProfiles] FOREIGN KEY ([tutorCWID]) REFERENCES [dbo].[UserProfiles] ([userCWID]));

背后的ASP.NET代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Students_StudentSelectSession : System.Web.UI.Page
{

string _StdSessCourse = "";
DateTime _StdSessDate = DateTime.Now;
string _semester = "";
protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnStdSessSearch_Click(object sender, EventArgs e)
{
    _StdSessCourse = ddlStdSessCourse.SelectedValue;
    _StdSessDate = calStdSessDate.SelectedDate;


    using (ISDS411_FinalProjectDB_5Entities stdSessEntity = new ISDS411_FinalProjectDB_5Entities())
    {
        var stdSessAvailable = (from s in stdSessEntity.Sessions
                                join up in stdSessEntity.UserProfiles on s.tutorCWID equals up.userCWID
                                join uc in stdSessEntity.UserProfiles_Courses on up.userCWID equals uc.tutorCWID
                                where uc.courseID == _StdSessCourse && s.session_date == _StdSessDate
                                orderby s.session_date
                                select new
                                {
                                    up.first_name,
                                    up.last_name,
                                    s.session_start_time,
                                    s.session_end_time,
                                    s.session_group_size,
                                    s.session_bookings,
                                }).FirstOrDefault();

        gvStdSessAvailable.DataSource = stdSessAvailable;
        gvStdSessAvailable.DataBind();
    }
  }
}

這是gridview:

<%@ Page Title="Student - Select Tutoring Session" Language="C#" MasterPageFile="~/Students/StudentMasterPage.master" AutoEventWireup="true" CodeFile="StudentSelectSession.aspx.cs" Inherits="Students_StudentSelectSession" %>

<asp:Content ID="Content1" ContentPlaceHolderID="cpMainContent" Runat="Server">
<h1>Select a session</h1>
<p>Use the controls below to select a tutoring session:
    <ol>
        <li>Select the course you want to be tutored in from the dropdown menu.</li>
        <li>Select the date that you are looking for a tutoring session on.</li>
        <li>Click the "Search" button.</li>
    </ol>
</p>
<table>
    <tr>
        <td>
            <asp:DropDownList ID="ddlStdSessCourse" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="courseID" DataValueField="courseID"></asp:DropDownList>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ISDS411_FinalProjectDB_5ConnectionString1 %>" SelectCommand="SELECT [courseID] FROM [Courses]"></asp:SqlDataSource>
        </td>
    </tr>
    <tr>
        <td>
            <asp:Calendar ID="calStdSessDate" runat="server"></asp:Calendar>
        </td>
    </tr>
    <tr>
        <td>
            <asp:Button ID="btnStdSessSearch" runat="server" Text="Search" OnClick="btnStdSessSearch_Click" />
        </td>
    </tr>
    <tr>
        <td>
            <asp:GridView ID="gvStdSessAvailable" runat="server" DataKeyNames="sessionID" EmptyDataText="There are no data records to display." AllowPaging="True" AllowSorting="True"></asp:GridView>
        </td>
    </tr>
</table>
<p><a href="~/Students/StudentHome.aspx" runat="server">Go back to Student Homepage</a></p>

我想這需要匿名類型以外的其他東西,但不確定如何將其組合在一起。 另外,我無法使用網格視圖,但是我想利用“選擇”功能來允許學生選擇他們想要的補習課程。

嘗試更改: .FirstOrDefault(); .AsEnumerable();

“我想這需要匿名類型以外的其他東西,但不確定如何將其放在一起”。只需創建一個具有屬性的新類,然后像這樣使用它:

var stdSessAvailable = (from s in stdSessEntity.Sessions
                            join up in stdSessEntity.UserProfiles on s.tutorCWID equals up.userCWID
                            join uc in stdSessEntity.UserProfiles_Courses on up.userCWID equals uc.tutorCWID
                            where uc.courseID == _StdSessCourse && s.session_date == _StdSessDate
                            orderby s.session_date
                            select new SessAvailable
                            {
                               FirstName = up.first_name,
                               LastName = up.last_name,
                               SessionStarTime = s.session_start_time,
                               SessionEndTime = s.session_end_time,
                               SessionGroupSize = s.session_group_size,
                               SessionBookings = s.session_bookings,
                            }).AsEnumerable();

暫無
暫無

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

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