我正在使用代码根据百分比值显示标签云。第一次将标记添加到我的数据库时,它看起来很大,然后相对于其他标记缩小(它们添加的次数越多)。这是代码:
private void BindTagCloud()
{
int pro_id = Convert.ToInt32(proj_id);
int iteration_id = Convert.ToInt32(iteration);
var tagSummaryNegative = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryNegativeIteration = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == iteration_id &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryPositive = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryPositiveIteration = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == iteration_id &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
int maxTagFrequencyNegative = (from t in tagSummaryNegative select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyPositive = (from t in tagSummaryPositive select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyNegativeIteration = (from t in tagSummaryNegativeIteration select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyPositiveIteration = (from t in tagSummaryPositiveIteration select (int?)t.tagCount).Max() ?? 0;
var tagCloudNegative = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
};
var tagCloudNegativeIteration = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == iteration_id &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyNegativeIteration * 100
};
var tagCloudPositive = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyPositive * 100
};
var tagCloudPositiveIteration = from af in db.AgileFactors
join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
join s in db.Stories on psf.StoryID equals s.StoryID
join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
join pro in db.Projects on it.ProjectID equals pro.ProjectID
where pro.ProjectID == pro_id &&
pro.ProjectID == it.ProjectID &&
it.ProjectIterationID == iteration_id &&
it.ProjectIterationID == pim.ProjectIterationID &&
pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
s.StoryID == psf.StoryID &&
psf.AgileFactorID == af.AgileFactorID
group af by af.Name into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyPositiveIteration * 100
};
if (iteration_id != 0)
{
ListView1.DataSource = tagCloudNegativeIteration;
ListView1.DataBind();
ListView2.DataSource = tagCloudPositiveIteration;
ListView2.DataBind();
}
else
{
ListView1.DataSource = tagCloudNegative;
ListView1.DataBind();
ListView2.DataSource = tagCloudPositive;
ListView2.DataBind();
}
}
public string GetTagSize(double weight)
{
if (weight >= 99)
return "xx-large";
else if (weight >= 60)
return "x-large";
else if (weight >= 40)
return "large";
else if (weight >= 20)
return "medium";
else
return "small";
}
然而,我想要做的是首先使标记变小(第一次添加),然后将其大小增加到所提及的次数。有谁知道我怎么做到这一点?非常感谢你的帮助!
答案 0 :(得分:0)
根据您显示的内容,标签应该已经显得很小 - tagGroup.Count()将为1而GetTagSize将返回“small”
必须覆盖此代码以强制字体大小 - 只需将其取出即可,我认为您应该得到您所要求的内容。
答案 1 :(得分:0)
你为什么不接受这个:
weight = (((double)tagGroup.Count() / maxTagFrequencyNegative * 100) - 100) * -1
这样你就可以拿出最多的数字然后反转它们。
答案 2 :(得分:0)
我简化了你的代码以便在我的盒子上运行它。一切似乎都没问题。在这里,您可以看到我的测试页面:
Test.aspx文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication2.Test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.xx-large
{
font-size: 30px;
}
.x-large
{
font-size: 25px;
}
.large
{
font-size: 20px;
}
.medium
{
font-size: 15px;
}
.small
{
font-size: 10px;
}
.tagCloud
{
padding: 20px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class=tagCloud>
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<span class='<%# GetTagSize((double)Eval("weight")) %>'>
<%# Eval("Tag") %></span>
</ItemTemplate>
</asp:ListView>
</div>
<div class=tagCloud>
<asp:ListView ID="ListView2" runat="server">
<ItemTemplate>
<span class='<%# GetTagSize((double)Eval("weight")) %>'>
<%# Eval("Tag") %></span>
</ItemTemplate>
</asp:ListView>
</div>
</form>
</body>
</html>
Test.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
BindTagCloud();
}
public class Race
{
public string GrandPrix { get; set; }
public string TeamWinner { get; set; }
public int Year { get; set; }
}
public IEnumerable<Race> GetRaces()
{
yield return new Race { GrandPrix = "Australia", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Malaysia", TeamWinner = "Williams-BMW", Year = 2002 };
yield return new Race { GrandPrix = "Brazil", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "San Marino", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Spain", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Austria", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Monaco", TeamWinner = "McLaren-Mercedes", Year = 2002 };
yield return new Race { GrandPrix = "Canada", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Europe", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Great Britain", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "France", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Germany", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Hungary", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Belgium", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Italy", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "United States", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Japan", TeamWinner = "Ferrari", Year = 2002 };
yield return new Race { GrandPrix = "Australia", TeamWinner = "McLaren-Mercedes", Year = 2003 };
yield return new Race { GrandPrix = "Malaysia", TeamWinner = "McLaren-Mercedes", Year = 2003 };
yield return new Race { GrandPrix = "Brazil", TeamWinner = "Jordan-Ford", Year = 2003 };
yield return new Race { GrandPrix = "San Marino", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Spain", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Austria", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Monaco", TeamWinner = "Williams-BMW", Year = 2003 };
yield return new Race { GrandPrix = "Canada", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Europe", TeamWinner = "Williams-BMW", Year = 2003 };
yield return new Race { GrandPrix = "France", TeamWinner = "Williams-BMW", Year = 2003 };
yield return new Race { GrandPrix = "Great Britain", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Germany", TeamWinner = "Williams-BMW", Year = 2003 };
yield return new Race { GrandPrix = "Hungary", TeamWinner = "Renault", Year = 2003 };
yield return new Race { GrandPrix = "Italy", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "United States", TeamWinner = "Ferrari", Year = 2003 };
yield return new Race { GrandPrix = "Japan", TeamWinner = "Ferrari", Year = 2003 };
}
private void BindTagCloud()
{
int year = 2002;
var tagSummaryNegative = from t in GetRaces()
where t.Year == 2002
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryNegativeIteration = from t in GetRaces()
where t.Year == 2002
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryPositive = from t in GetRaces()
where t.Year == 2003
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
var tagSummaryPositiveIteration = from t in GetRaces()
where t.Year == 2003
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
tagCount = tagGroup.Count()
};
int maxTagFrequencyNegative = (from t in tagSummaryNegative select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyPositive = (from t in tagSummaryPositive select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyNegativeIteration = (from t in tagSummaryNegativeIteration select (int?)t.tagCount).Max() ?? 0;
int maxTagFrequencyPositiveIteration = (from t in tagSummaryPositiveIteration select (int?)t.tagCount).Max() ?? 0;
var tagCloudNegative = from t in GetRaces()
where t.Year == 2002
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
};
var tagCloudNegativeIteration = from t in GetRaces()
where t.Year == 2002
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyNegativeIteration * 100
};
var tagCloudPositive = from t in GetRaces()
where t.Year == 2003
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyPositive * 100
};
var tagCloudPositiveIteration = from t in GetRaces()
where t.Year == 2003
group t by t.TeamWinner into tagGroup
select new
{
Tag = tagGroup.Key,
weight = (double)tagGroup.Count() / maxTagFrequencyPositiveIteration * 100
};
if (year == 2002)
{
ListView1.DataSource = tagCloudNegativeIteration;
ListView1.DataBind();
ListView2.DataSource = tagCloudPositiveIteration;
ListView2.DataBind();
}
else
{
ListView1.DataSource = tagCloudNegative;
ListView1.DataBind();
ListView2.DataSource = tagCloudPositive;
ListView2.DataBind();
}
}
public string GetTagSize(double weight)
{
if (weight >= 99)
return "xx-large";
else if (weight >= 60)
return "x-large";
else if (weight >= 40)
return "large";
else if (weight >= 20)
return "medium";
else
return "small";
}
}
}
在这里你可以看到结果: ![标签云] [1]
我建议您稍微调试一下代码并检查所有数字是否正确。可能你在查询中遇到了一些问题(错误的连接或类似的东西),因为所有其他代码对我来说都很好。
希望这有帮助。
P.S。你可能在css中遇到问题吗?