【问题标题】:WPF C# Foreach getting next valueWPF C# Foreach 获得下一个值
【发布时间】:2013-07-17 01:35:23
【问题描述】:

我从数据库中获得了一个记录列表,我在我的 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#。

非常感谢任何帮助/解决方案,在此先感谢。

【问题讨论】:

    标签: c# wpf foreach lambda records


    【解决方案1】:

    首先,我不会尝试在一个语句中做到这一点。您可能希望对数据进行一些预处理,因为每个问题(例如单行)都包含开头内容部分、选项部分和结尾部分的重叠,至少跨越 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 等进行模拟...

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 2018-12-08
      相关资源
      最近更新 更多