установить значение столбца gridview в зависимости от результата запроса MS Access - PullRequest
3 голосов
/ 08 мая 2011

У меня есть запрос, который извлекает значения из таблицы в 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

Затем я делаю привязку данных к сетке

На моей странице aspx я использую следующий метод для построения моих столбцов в сетке

<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 отдельных поля для ролей инструктора: футбол, спортзал, йога, которые являются истинными / ложными значениями в расписании инструктора. Я пытался (без удачи) получить столбец 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 ]

2 голосов
/ 08 мая 2011

Вы должны использовать оператор Case в своем запросе SQL. Ваш окончательный запрос будет выглядеть так:

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
0 голосов
/ 08 мая 2011

Если вы не можете изменить запрос 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...