根据MS Access查询的结果设置gridview列的值

时间:2011-05-07 23:09:41

标签: asp.net sql vb.net ms-access gridview

我有一个查询,它从MS Access中的表中提取值

SELECT
    tblInstructor.InstructorID,
    tblInstructor.Football AS InstructorRole,
    tblInstructor.Gym AS InstructorRole,
    tblInstructor.Yoga AS InstructorRole
FROM
    tblInstructor
WHERE
    tblInstructor.InstructorID = @InstructID
    OR tblInstructorRole.Football = 1
    OR tblInstructorRole.Gym = 1
    OR tblInstructor.Yoga = 1

然后我将数据绑定到gridview

在我的aspx页面中,我使用以下方法在gridview中构建我的列

<asp:TemplateField HeaderText="Instructor ID">
    <ItemTemplate >
        <asp:Label ID="lblInstructorID" runat="server" Text='<%# Eval("InstructorID") %>' >
        </asp:Label>
    </ItemTemplate>
</asp:TemplateField>  

我遇到的问题是我收到了多次返回的错误,但是每个教师只有一个角色,所以我试图获得教师的角色,即取决于是否使用我上面的sql语句是真的然后使用教师角色

设置讲师角色列
 <asp:TemplateField HeaderText="Instructor Role">
     <ItemTemplate >
        <asp:Label ID="lblInstructRole" runat="server" Text='<%# Eval("InstructorRole") %>' >
        </asp:Label>
     </ItemTemplate>
 </asp:TemplateField>   

我的桌子有3个单独的领域,用于教练角色足球,健身房,瑜伽,这是教练时间表中的真/假值。我一直在尝试(没有运气)在gridview中获取列InstructorRole来显示他们角色的文本,即足球

我还试图做以下事情:

If myReader(3) = True then
    Dim Role1 As String = DataBinder.Eval(e.Item.DataItem,"InstructorRole")
    Role1 = "Football"
elseif myReader(4) = true then
    Dim Role2 As String = DataBinder.Eval(e.Item.DataItem,"InstructorRole")
    Role1 = "Gym"

如果有人可以告诉我该怎么做,我似乎无法弄清楚这一点。

2 个答案:

答案 0 :(得分:2)

您必须在SQL查询中使用Case语句。您的最终查询将如下所示:

SELECT
tblInstructor.InstructorID,
(case when tblInstructor.Football = 1 then tblInstructor.Football
 case when tblInstructor.Gym = 1 then tblInstructor.Gym
 case when tblInstructor.Yoga = 1 then tblInstructor.Yoga
 else '' END) as InstructorRole
FROM
    tblInstructor
WHERE
    tblInstructor.InstructorID = @InstructID

答案 1 :(得分:0)

如果您无法修改SQL查询,可以使用Linq在代码中执行此操作,具体内容如下:

var results = from p in [query results]
              select new {
                 // other columns you need
                 InstructorRole = formatRole(p.IsFootball, p.IsGym, p.IsYoga )
              }

formatRole功能非常简单

private string formatRole(bool football, bool gym, bool, yoga){
    if( football )
        return "Football";
    else if( gym )
        return "Gym";
    else if( yoga )
        return "Yoga";
    else
        // whatever the appropriate thing is, return "N/A" or throw an exception, up to you really.
}

然后,您可以将网格数据绑定到results集合。