0

我从数据库中获得了一个记录列表,我在我的 CRUD 类中像这样检索了这些记录(我正在使用实体框架,而 Model.question 是我的类,其中包含 CRUD 代码):

        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 和 taskID。一些记录具有相同的 activityID 和 taskID 但不同的 questionNO 。这是我的数据库表的样子:

在此处输入图像描述

目前,我可以很好地显示每条记录(使用 foreach 循环),但我想要的是将相同 activityID、taskID 和 questionNo 的记录组合在一行中,现在每条记录都像这样逐行分隔:

在此处输入图像描述

我希望它像

我[回答]每天下午要睡午觉

太阳 [答案] 不绕地球转。

我尝试在 CRUD 中通过查询进行分组(我正在使用 lambda 表达式),但由于某些 igrouping 和数据整形原因而失败(在这方面不好),还有其他方法可以轻松做到这一点吗?

我想到的是使用 foreach 循环,但我可以获得 questionNo 的下一个值吗?例如在这个循环中 questionNo 是 1,我想检查下一个循环中的 questionNo 是否相同,如果不一样,我会将其添加到下一行,但如果相同,我会将其添加到同一行。但是我不擅长面板和东西,因为我是编程新手以及 WPF/C#。

将不胜感激任何帮助/解决方案,在此先感谢。

4

1 回答 1

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可以垂直堆叠对象,并且可以将每个对象中QuestionPart的每个对象都Question包裹起来(可能在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 和ItemsControlsandDataTemplates等进行模拟......

希望能帮助到你。

于 2013-07-17T02:48:33.417 回答