Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#(windows窗体)中创建轮询_C#_Winforms_Datagridview_Charts - Fatal编程技术网

在C#(windows窗体)中创建轮询

在C#(windows窗体)中创建轮询,c#,winforms,datagridview,charts,C#,Winforms,Datagridview,Charts,我想创建一个投票。我有一个问题表(字段:ID,问题)和另一个答案表(字段:ID,问题ID,答案)。有一个结果表(字段:QuestionID、AnswerID、UserID)。我想显示对datagridview中任何项目的响应百分比。 例如,当我输入问题id时,datagridview显示: 选择问题ID:1 选项……….百分比 1------------------30 2------------------20 3-----------------50 4------------------1

我想创建一个投票。我有一个问题表(字段:ID,问题)和另一个答案表(字段:ID,问题ID,答案)。有一个结果表(字段:QuestionID、AnswerID、UserID)。我想显示对datagridview中任何项目的响应百分比。 例如,当我输入问题id时,datagridview显示:

选择问题ID:1 选项……….百分比 1------------------30

2------------------20

3-----------------50

4------------------10

这是我的代码,但结果没有显示:

    int a = Convert.ToInt32(textBox1.Text);

        var q = (from s in Session.DB.PoolUsers
                 where s.PoolQID == a
                 select s);
        var qq = (from c in q
                  group c by c.PoolAID into agroups
                  select agroups.Key);
        var qqq = (from c in qq
                   select c).Count();
        MessageBox.Show(qqq.ToString());
这是我的课程:

    public partial class PoolA    //For answers
{
    public int Id { get; set; }
    public string Answer { get; set; }
    public string QuestionID { get; set; }
}

     public partial class PoolQ    //Questions
{
    public int Id { get; set; }
    public string Question { get; set; }
    public string AnswerID { get; set; }
    public string Status { get; set; }
    public string StartDate { get; set; }
    public string EndDate { get; set; }
}

     public partial class PoolUser  //resaults
{
    public int Id { get; set; }
    public int PoolQID { get; set; }
    public int PoolAID { get; set; }
    public int UserID { get; set; }
}

我不知道您的意图,但我认为您应该重新设计模式(不是说它不可行),以获得最大的效率。您将PoolUser表称为results表,但它充其量只是您的答案日志。您需要一个已经处理了结果的表,就像在DWH类型的情况下一样

如果你有一个结果汇总表,你可以整天计算垂直和组,而不需要额外的连接表等特殊数据的性能。我想你会经常运行这个来检查结果,所以听起来存储总结信息是一个更好的主意,用于报告、性能等

至于问题的现状:

var qq = (from c in q
          group c by c.PoolAID into agroups
          select agroups.Key);
agroups将答案按您键入的问题编号分组。 然后,您只需显示分组答案的行数,这显示了2:

var qqq = (from c in qq
           select c).Count();
你是说你的信息框显示的是数字“2” 这意味着人们只选择了2个选项来回答你提出的任何问题。你不知道答案是否正确。最后一个查询“qqq”,您的计数在外面,因此它只返回行计数。您不需要行计数。您需要分组后的应答ID计数

from c in qq
select count(c)
这是您键入的问题ID的总答案


现在你需要正确的答案来计算百分比。这是缺少的查询。你已经走了75%的路。把它做完。希望这足够详细,没有太多的文本可以阅读。

我不知道您的意图,但我认为您应该重新设计模式(不是说它不可行),以获得最大的效率。您将PoolUser表称为results表,但它充其量只是您的答案日志。您需要一个已经处理了结果的表,就像在DWH类型的情况下一样

如果你有一个结果汇总表,你可以整天计算垂直和组,而不需要额外的连接表等特殊数据的性能。我想你会经常运行这个来检查结果,所以听起来存储总结信息是一个更好的主意,用于报告、性能等

至于问题的现状:

var qq = (from c in q
          group c by c.PoolAID into agroups
          select agroups.Key);
agroups将答案按您键入的问题编号分组。 然后,您只需显示分组答案的行数,这显示了2:

var qqq = (from c in qq
           select c).Count();
你是说你的信息框显示的是数字“2” 这意味着人们只选择了2个选项来回答你提出的任何问题。你不知道答案是否正确。最后一个查询“qqq”,您的计数在外面,因此它只返回行计数。您不需要行计数。您需要分组后的应答ID计数

from c in qq
select count(c)
这是您键入的问题ID的总答案


现在你需要正确的答案来计算百分比。这是缺少的查询。你已经走了75%的路。把它做完。希望这是足够的细节,而不是太多的文本要阅读。

< P>这不是我要做的最佳方式,我会高度考虑你,改变你的实体。

解决方案如下:

int questionId = 1;
var questionAnswers = list.Where(elem => elem.PoolQID == questionId);
int questionAnswersCount = questionAnswers.Count();
var answersPrecentage = questionAnswers
                        .GroupBy(elem => elem.PoolAID)
                        .ToDictionary(grp => grp.Key, grp => (grp.Count() * 100.0 / questionAnswersCount));

< P>这不是我要做的最佳方式,我会高度考虑你,改变你的实体。

解决方案如下:

int questionId = 1;
var questionAnswers = list.Where(elem => elem.PoolQID == questionId);
int questionAnswersCount = questionAnswers.Count();
var answersPrecentage = questionAnswers
                        .GroupBy(elem => elem.PoolAID)
                        .ToDictionary(grp => grp.Key, grp => (grp.Count() * 100.0 / questionAnswersCount));

问题解决了,我得到了以下代码。我还绘制了一个基于

       private void button1_Click(object sender, EventArgs e)
    {
        var list = (from c in Session.DB.PoolUsers
                 select c).ToList();
        int questionId = Convert.ToInt32(textBox1.Text);
        var questionAnswers = list.Where(elem => elem.PoolQID == questionId);
        int questionAnswersCount = questionAnswers.Count();
        var answersPrecentage = questionAnswers
                                .GroupBy(elem => elem.PoolAID)
                                .ToDictionary(grp => grp.Key, grp => (grp.Count() * 100.0 / questionAnswersCount));
        dataGridView1.DataSource = answersPrecentage.ToArray();


        //Draw Chart From DataGridview:
        chart1.DataBindTable(answersPrecentage);

    }
而且工作正常
谢谢大家:)

问题解决了,我得到了以下代码。我还绘制了一个基于

       private void button1_Click(object sender, EventArgs e)
    {
        var list = (from c in Session.DB.PoolUsers
                 select c).ToList();
        int questionId = Convert.ToInt32(textBox1.Text);
        var questionAnswers = list.Where(elem => elem.PoolQID == questionId);
        int questionAnswersCount = questionAnswers.Count();
        var answersPrecentage = questionAnswers
                                .GroupBy(elem => elem.PoolAID)
                                .ToDictionary(grp => grp.Key, grp => (grp.Count() * 100.0 / questionAnswersCount));
        dataGridView1.DataSource = answersPrecentage.ToArray();


        //Draw Chart From DataGridview:
        chart1.DataBindTable(answersPrecentage);

    }
而且工作正常
谢谢大家:)

您能发布相关实体(类)吗?您所说的结果不显示是什么意思?如何在gridview中看到百分比而不是代码;您发布的linq的预期结果是什么?只是总体上需要更多information@MutuYolbulan我手动显示重新结果,例如,代码在消息中仅显示“2”box@oreleraki这是我的实体,编辑你能发布相关的实体(类)吗?你说结果不显示是什么意思?如何在gridview中看到百分比而不是代码;您发布的linq的预期结果是什么?只是总体上需要更多information@MutuYolbulan我手动显示重新结果,例如,代码在消息中仅显示“2”box@oreleraki这是我的实体,编辑手稿,有用的。。。PoolUser是我的答案日志。但是我不知道如何计算每个问题答案的百分比。。。我想数一数对每个选项投票的成员,然后计算他们的百分比。这是真的吗?我该怎么做?据了解,选择的数量是无限的…谢谢,有用的。。。PoolUser是我的答案日志。但是我不知道如何计算每个问题答案的百分比。。。我想数一数对每个选项投票的成员,然后计算他们的百分比。这是真的吗?我该怎么做?根据这一点,选择的数量是无限的。。。