2012-03-06 103 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 2012-03-06 15:34:01

+0

我通過LINQ語句綁定。我不確定我是否可以修改LINQ語句來切換它......我編輯了我的原始文章以包含LINQ。 - 謝謝 – SkyeBoniwell 2012-03-06 15:41:20

+1

您可能能夠使用另一個linq查詢來轉發數據:http://stackoverflow.com/questions/167304/is-it-possible-to-pivot-data-using-linq – jmaglio 2012-03-06 16:25:07

回答

1

您需要使用GROUP BY彙總結果。這應該工作:

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