2016-12-09 24 views
0

大学の先生向けのスケジューリングシステムを構築します。ボタンのクリックで実行されるLINQクエリを作成しました。利用可能なスロットをグリッドビューに戻したいと思います。クエリは匿名型を返すので、データバインドはタイトルにエラーを投げています。私はここで修正を探し回ってきましたが、クエリーがコントロール内にある場所は何もありません(ここのボタン)ので、変更の方法がわかりません。データソースが無効です。 IListSource、IEnumerable、またはIDataSourceのいずれかである必要があります

テーブル:

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コードの背後には:

<%@ 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> 

私はこれが以外に必要と推測する:ここで

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の匿名のtyp eを組み合わせる方法は不明です。代わりに、私はグリッドビューを使用することができませんでしたが、私は "選択"機能を利用して、生徒が希望する教師のセッションを選択できるようにしたいと考えていました。

+0

ありがとう@Stargateur。変更を加えました。 –

答えて

0

てみ変更:

.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(); 
+0

@hektaありがとうございます! SessAvailableの型または名前空間が見つかりません。何か案は?編集:私はそれの隣に小さなアイコンを使用してSessAvailableのための新しいクラスを作成しました。クラスが作成されましたが、 "FirstName、LastName" ...などは "SessAvailable"に "X"の定義が含まれていないと強調表示されます。これらをどのように追加しますか?プロパティスタブを生成しますか?プロパティフィールド? –

+0

私はapp_codeフォルダに追加された "SessAvailable"クラスを作成しました。私は次のようにヘッダを入れます: public class SessAvailable { public string FirstName; public string LastName; public TimeSpan SessionStartTime; public string SessionEndTime; public int SessionGroupSize; public int SessionBookings; } "idが 'gvStdSessAvailable'のGridViewのデータソースには、列を生成するプロパティまたは属性がありませんでした。データソースにコンテンツがあることを確認してください。 –

+0

問題なしRob P.これらのプロパティを自動実装プロパティとして作成していますか? – hekta

関連する問題