2012-03-06 2 views
3

У меня есть веб-сайт vb.net с GridView, который в настоящее время имеет экзаменационные вопросы, отображающие по вертикали в каждой строке, как это:динамически заселение заголовки столбцов в GridView

Name question answer 
----------------------- 
Joe question1 answer1 
Joe question2 answer2 
Joe question3 answer3 
Jill question1 answer1 
Jill question2 answer2 
Jill question3 answer3 

Но я хотел бы изменить его, так что каждый вопрос является заголовком, например:

Name question1 question2 question3 
---------------------------------- 
Joe answer1 answer2 answer3 
Jill answer1 answer2 answer3 

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

Я потратил большую часть утренней поисковой системы на поиски решений, но на самом деле не могу найти ничего, что сработает.

Я хотел бы придерживаться gridview вместо того, чтобы переписывать весь мой код.

Есть ли у кого-нибудь предложения?

Я фактически привязываю свои данные к gridview через некоторые другие классы программистов. Я использую LINQ, как это:

Return (From entry In report.FetchAllEntries() 
       Select questionID = entry.Question.QuestionID, 
       userID = entry.Session.User.ID, 
       firstName = entry.Session.User.FirstName, 
       lastName = entry.Session.User.LastName, 
       QuestionText = entry.Question.Stem, 
       UserResponse = entry.Response.Text, 
       FreeResponse = entry.ResponseText, 
       SessionDate = entry.Timestamp 
       Where SessionDate.HasValue AndAlso 
           SessionDate.Value >= dateField1 AndAlso 
           SessionDate.Value <= dateField2 
       Order By lastName, SessionDate, questionID 

Благодаря

+1

Похоже, что вы можете сделать это, изменив ваш SQL-запрос (например, «PIVOT» или что-то в этом роде). Вы можете показать запрос, который генерирует данные для вашего «GridView»? – jadarnel27

+0

Я связываюсь с помощью оператора LINQ. Я не уверен, могу ли я изменить инструкцию LINQ, чтобы переключать ее таким образом ... Я редактировал свое оригинальное сообщение, чтобы включить LINQ. - Спасибо – SkyeBoniwell

+1

Возможно, вы можете свернуть данные с помощью другого запроса linq: http://stackoverflow.com/questions/167304/is-it-possible-to-pivot-data-using-linq – jmaglio

ответ

1

Вы должны использовать группу, чтобы объединить результаты. Это должно сработать:

Dim grouped = 
    From usersAnswers In 
     From result In results 
     Group result By result.userID Into Group 
     Let answers = Group.OrderBy(Function(x) x.QuestionText).ToList() 
     Select 
      answers.First().firstName, 
      Question1 = answers(0).UserResponse, 
      Question2 = answers(1).UserResponse, 
      Question3 = answers(2).UserResponse