知道如何让我的查询正确显示记录吗?

时间:2013-06-02 18:37:21

标签: asp.net sql-server vb.net

根据下面的屏幕截图,我们使用dataList在页面上显示多条记录。

目前的工作方式是用户从下拉列表中选择一个位置,并显示与该位置相关的记录。

记录包括课程,教师,日期,容量座位和每个地点的培训剩余座位。

然后在每一行上都有一个链接,上面写着“注册此培训”

用户点击此链接可注册该位置的该课程。

这会在db上存储正确的记录并显示remainingSeating。

我们假设特定地点的特定课程有45个容量座位。

如果用户注册,则44将显示为要注册的剩余席位。

我目前遇到的问题是,在显示页面上,remainingSeating的值对于所有课程都是相同的。

我们希望每个课程都显示相同的容量,但是根据该课程的注册数量,可以显示不同的剩余课程。

希望我的解释清楚。

以下是我目前正在使用的代码:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
 SelectCommand="select l.LocationId,c.courseId, c.coursename,tm.trainingMode,Isnull(t.availableSeats,30) availableSeats,d.dateid,d.trainingDates, d.trainingtime, c.CourseDescription,i.instructorName, l.location,l.seating_capacity 
                from tblLocations l
                left join tblTrainings t on l.locationId = t.LocationId
                Inner Join tblCourses c on l.locationId = c.locationId
                Inner Join tblTrainingDates d on c.dateid=d.dateid 
                Inner Join tblTrainingMode tm on c.trainingModeId = tm.trainingModeId
                Inner Join tblCourseInstructor ic on c.courseId = ic.CourseId  
                Inner Join tblInstructors i on ic.instructorId = i.instructorId" 
      FilterExpression="LocationId = '{0}'" >
<FilterParameters>
 <asp:ControlParameter ControlID="ddlLocation" Name="LocationId" 
  PropertyName="SelectedValue" Type="Int32" />
 </FilterParameters>
</asp:SqlDataSource>

最后,下面是网上商店。

如您所见,一旦更新了一行的remainingSeat,其余行将显示相同的值。那不是我们想要的。

我认为问题出在查询上。

![在此处输入图片说明] [1]

1 个答案:

答案 0 :(得分:1)

我认为tblTrainings包含有关位置课程的信息,但是适当的加入

left join tblTrainings t on l.locationId = t.LocationId

仅包含locationId。它应该通过修改

left join tblTrainings t on l.locationId = t.LocationId and c.courseId = t.courseId