2013-07-17 54 views
0

我從我的CRUD類中檢索到這樣的數據庫中的記錄列表(我正在使用實體框架和Model.question是我的類中有CRUD代碼):WPF C#Foreach獲得下一個值

 public IList<Model.questionhint> GetRecords(int listTask, int listActivity) 
    { 
     IList<Model.questionhint> lstRecords = context.questionhints.ToList(); 
     return lstRecords.Where(a => a.TaskID == listTask && a.ActivityID == listActivity).ToList(); 

    } 

這也是我如何把它從我的xaml.cs:

IList<Model.questionhint> lstQuestionHints = qh.GetRecords(taskID, activityID); 

     StackPanel sp = new StackPanel(); 
     foreach (Model.questionhint qhm in lstQuestionHints) 
     { //Code here 
     } 

但在我的數據庫表中,有一列呼叫questionNo,一些記錄有相同questionNo,activityID和任務id。一些記錄具有相同的activityID和taskID但不同的問題號。 這是我的數據庫表的樣子:

enter image description here

此刻,我能很好地顯示每個記錄(使用foreach循環),但我想是一樣activityID,任務id的組記錄和questionNo一起在一條線上,現在每一條記錄是分離式線線是這樣的:

enter image description here

我希望它像

我[回答]每天下午都要打個盹

太陽[回答]不動地球。

我試圖通過查詢在CRUD(我使用lambda表達式)做一個組,但它由於一些igrouping和數據整形的原因(這不是很好),有沒有其他的方式來做到這一點很容易?

我心裏在想的是通過使用foreach循環,但是我可以得到questionNo的下一個值嗎?例如在這個循環中,questionNo是1,我想檢查下一個循環中的questionNo是否相同,如果不相同,我將它添加到下一行,但如果它相同,我將它添加到同一條線。但我不擅長面板和東西,因爲我是新手編程以及WPF/C#。

希望任何幫助/解決方案,在此先感謝。

回答

0

首先,我不會試圖在一個聲明中這樣做。您可能需要對數據進行一些預處理,因爲每個問題(例如單行)由起始內容部分,選項部分和結束部分的重疊組成,跨越至少2條記錄。

所以,創建將代表這個問題的一部分,像這樣(只是一個例子)一個型號:

public abstract class QuestionPart {} 

public class ContentPart : QuestionPart { 
// holds the content 
} 

public class OptionsPart : QuestionPart { 
// holds the options and the answer 
} 

public class Question{ 
    public List<QuestionPart> questionParts {get; set;} 
} 

public class YourViewModel{ 
    public List<Question> questions {get; set;} 
} 

然後,Question對象可以被垂直堆疊,並且每個Question內的每個QuestionPart可以是包裹(可能WrapPanel會在這裏工作最好)連鎖成一個問題。

要收集來的數據的問題收集 - 你可以不喜歡以下(我可能有錯誤 - 我還沒有編譯它,但是這應該給你一個想法):

List<QuestionPart> questionParts = lstQuestionHints.SelectMany((r) => ExtractQuestionParts(r)); // ExtractQuestionParts returns a list of 1 or more question parts from each record 

var groupedQuestionParts = questionParts.GroupBy((r) => r.QuestionNo); 

var questions = groupedQuestionParts.Select((g) => return new Question(g.Key, g.ToList())); 

現在,你有Questions在收集你既可以在代碼中創建隱藏控件(如你似乎想要做的),或者用XAML和ItemsControlsDataTemplates等周圍嘲笑......

希望它能幫助。