今天看到TerryLee的一篇文章
http://www.cnblogs.com/Terrylee/archive/2008/02/20/1075764.html,其中有一条
ASP.NET Tag/Search Cloud Server Control(导读:在Web2.0时代,Tag成为了一个标志,通常一些网站都会采用Tag云图来显示。有“好事者”干脆开发了一个Tag云的ASP.NET服务器控件),里边的源文件是用vb写的,我就把代码改改,转换成C#的了,代码我直接贴出来吧,大家自己看吧!
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.ComponentModel;
using
System.Data;
using
System.Collections;
using
System.Text.RegularExpressions;

namespace
Conovosoft.Web.UI.WebControls

{
[ToolboxData("<{0}:SearchCloudrunat=server></{0}:SearchCloud>")]
publicclassSearchCloud:WebControl


{

"属性"#region"属性"


"Appearance"#region"Appearance"

[Bindable(true),Category("Appearance"),Localizable(true)]
publicintMinFontSize


{
get


{
strings=(string)ViewState["MinFontSize"];
if(String.IsNullOrEmpty(s))
return10;
else


{
intresult=10;
int.TryParse(s,outresult);
returnresult;
}
}
set


{
ViewState["MinFontSize"]=value;
}
}

[Bindable(true),Category("Appearance"),Localizable(true)]
publicintMaxFontSize


{
get


{
strings=(string)ViewState["MaxFontSize"];
if(String.IsNullOrEmpty(s))
return22;
else


{
intresult=22;
int.TryParse(s,outresult);
returnresult;
}
}
set


{
ViewState["MaxFontSize"]=value;
}
}

[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringFontUint


{
get


{
strings=(string)ViewState["FontUint"];
if(String.IsNullOrEmpty(s))
return"pt";
else
returns;
}
set


{
switch(value)


{
case"pt":
case"em":
case"%":
case"px":
ViewState["FontUnit"]=value;break;
default:
ViewState["FontUnit"]="px";break;
}
}
}

[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringMaxColor


{
get


{
strings=(string)ViewState["MaxColor"];

if(String.IsNullOrEmpty(s))
return"#00f";
else
returns;
}
set


{
ViewState["MaxColor"]=value;
}
}

[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringMinColor


{
get


{
strings=(string)ViewState["MinColor"];

if(String.IsNullOrEmpty(s))
return"#000";
else
returns;
}
set


{
ViewState["MinColor"]=value;
}
}

#endregion


"Data"#region"Data"

[Bindable(true),Category("Data"),DefaultValue("")]
publicDataSetDataSource


{
get


{
return(DataSet)ViewState["DataSource"];
}
set


{
ViewState["DataSource"]=value;
}
}

[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataIDField


{
get


{
return(string)ViewState["DataIDField"];
}
set


{
ViewState["DataIDField"]=value;
}
}

[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataKeywordField


{
get


{
return(string)ViewState["DataKeywordField"];
}
set


{
ViewState["DataKeywordField"]=value;
}
}

[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataURLField


{
get


{
return(string)ViewState["DataURLField"];
}
set


{
ViewState["DataURLField"]=value;
}
}

[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataCountField


{
get


{
return(string)ViewState["DataCountField"];
}
set


{
ViewState["DataCountField"]=value;
}
}

[Bindable(true),Category("Data"),Localizable(true)]
publicstringKeywordTitleFormat


{
get


{
strings=(string)ViewState["KeywordTitleFormat"];
if(String.IsNullOrEmpty(s))


{
return"%koccured%ctimes";
}
else


{
return(string)ViewState["KeywordTitleFormat"];
}
}
set


{
ViewState["KeywordTitleFormat"]=value;
}
}

[Bindable(true),Category("Data"),Localizable(true)]
publicstringKeywordURLFormat


{
get


{
return(string)ViewState["KeywordURLFormat"];
}
set


{
ViewState["KeywordURLFormat"]=value;
}
}

[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringSortBy


{
get


{
return(string)ViewState["SortBy"];
}
set


{
ViewState["SortBy"]=value;
}
}

#endregion

[Bindable(false),Category("Debug"),DefaultValue(false),Localizable(true)]
publicBooleanDebug


{
get


{
if(ViewState["Debug"]!=null)


{
return(Boolean)ViewState["Debug"];
}
else


{
returnfalse;
}

}
set


{
ViewState["Debug"]=value;
}
}


PrivateProperties#regionPrivateProperties

privateHashtablearrAttributes;

privatestringCloudHTML


{
get


{
strings=(string)ViewState["CloudHTML"];
if(String.IsNullOrEmpty(s))


{
returnstring.Empty;
}
returns;
}
set


{
ViewState["CloudHTML"]=value;
}
}

privateHashtableKeyAttributes


{
get


{
returnarrAttributes;
}
set


{
arrAttributes=value;
}
}

#endregion

#endregion

protectedoverridevoidRender(HtmlTextWriterwriter)


{
if(!String.IsNullOrEmpty(CloudHTML))


{
writer.WriteBeginTag("div");

if(!String.IsNullOrEmpty(CssClass))


{
writer.WriteAttribute("class",CssClass);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(CloudHTML);
writer.WriteEndTag("div");
}
else


{
writer.Write("这儿没有产生HTML,一个未操作错误发生.");
}
}

protectedoverridevoidOnLoad(EventArgse)


{
if(DataSource==null)


{
CloudHTML="请指定DataSet";
return;
}
if(DataIDField==string.Empty)


{
CloudHTML="请指定一个ID数据段";
return;
}
if(DataKeywordField==string.Empty)


{
CloudHTML="请指定一个关键词数据段";
return;
}
if(DataCountField==string.Empty)


{
CloudHTML="请指定一个关键词数量数据段";
return;
}
if(!Regex.IsMatch(MinColor,"^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$"))


{
CloudHTML="最小颜色必须为十六进制编码并且必须为如:#000or#ff99cc";
return;
}
if(!Regex.IsMatch(MaxColor,"^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$"))


{
CloudHTML="最小颜色必须为十六进制编码并且必须为如:#000or#ff99cc";
return;
}

try


{
StringBuildersb=newStringBuilder();
DataViewdv=newDataView(DataSource.Tables[0]);
//DataRowViewrow;

dv.Sort=string.Format("{0}DESC",DataCountField);

intcount=dv.Count;

if(count==0)


{
CloudHTML="没有任何值产生云";
return;
}

intMaxQty=int.Parse(dv[0].Row[DataCountField].ToString());
intMinQty=int.Parse(dv[dv.Count-1].Row[DataCountField].ToString());

intSpread=MaxQty-MinQty;

if(Spread==0)
Spread=1;

intFontSpread=MaxFontSize-MinFontSize;
if(FontSpread==0)
FontSpread=1;

doubleFontStep=(double)(FontSpread)/Spread;

if(!string.IsNullOrEmpty(SortBy))


{
dv.Sort=SortBy;
}
else


{
dv.Sort=string.Format("{0}ASC",DataKeywordField);
}

foreach(DataRowViewrowindv)


{
intsKeyID=int.Parse(row.Row[DataIDField].ToString());
stringsKeyWord=row.Row[DataKeywordField].ToString();
intsKeyCount=int.Parse(row.Row[DataCountField].ToString());
stringsKeyURL;
stringColorRGB;
doubleWeight=MinFontSize+((sKeyCount-MinQty)*FontStep);
intFontDiff=MaxFontSize-MinFontSize;
doubleColorWeight=Math.Round(99*(Weight-MinFontSize)/(FontDiff)+1);

if(MinColor==MaxColor)


{
ColorRGB=MinColor;
}
else


{
ColorRGB=Colorize(MinColor,MaxColor,ColorWeight);
}

if(String.IsNullOrEmpty(DataURLField))


{
if(!String.IsNullOrEmpty(KeywordURLFormat))


{
sKeyURL=ReplaceKeyValues(KeywordURLFormat,sKeyID,sKeyWord,"",sKeyCount);
}
else


{
sKeyURL="#";
}
}
else


{
sKeyURL=row[DataURLField].ToString();
}

sb.Append(string.Format("<ahref=/"
{0}/"style=/"font-size:
{1}
{5};color:
{4};/"title=/"
{2}/"{6}>{3}</a>",
sKeyURL,
Math.Round(Weight),
ReplaceKeyValues(KeywordTitleFormat,sKeyID,sKeyWord,sKeyURL,sKeyCount),
HttpContext.Current.Server.HtmlEncode(sKeyWord),
ColorRGB,
FontUint,
GenerateAttributes(sKeyWord,sKeyID,sKeyURL,sKeyCount)));
}
CloudHTML=sb.ToString();
}
catch(Exceptionex)


{
if(!Debug)


{
CloudHTML="错误产生";
}
else


{
throwex;
}
}
finally


{
base.OnLoad(e);
}
}

publicvoidAddAttribute(stringvalue,stringtext)


{
if(KeyAttributes==null)


{
KeyAttributes=newHashtable();
}
KeyAttributes.Add(value,text);
}

privatestringGenerateAttributes(stringk,intid,stringu,intc)


{
if(KeyAttributes==null)


{
returnstring.Empty;
}

StringBuilders=newStringBuilder();
ICollectionkeys=KeyAttributes.Keys;

foreach(objectkeyinkeys)


{

s.Append(string.Format("{0}=/"
{1}/"",key,ReplaceKeyValues(KeyAttributes[key].ToString(),id,k,u,c)));
}

returns.ToString();
}

privatestringReplaceKeyValues(stringtxt,intid,stringk,stringu,intc)


{
k=k.Replace("'","'");

txt=txt.Replace("%i",id.ToString());
txt=txt.Replace("%k",HttpContext.Current.Server.HtmlEncode(k));
txt=txt.Replace("%u",u);
txt=txt.Replace("%c",c.ToString());

returntxt;
}

privatestringColorize(stringminc,stringmaxc,doublew)


{
w=w/100;
stringrs,gs,bs;
stringr,g,b;
intminr,ming,minb,maxr,maxg,maxb;

if(minc.Length==4)


{
rs=minc.Substring(1,1);
gs=minc.Substring(2,1);
bs=minc.Substring(3,1);

minc="#"+rs+rs+gs+gs+bs+bs;
}

if(maxc.Length==4)


{
rs=maxc.Substring(1,1);
gs=maxc.Substring(2,1);
bs=maxc.Substring(3,1);

maxc="#"+rs+rs+gs+gs+bs+bs;
}

minr=Convert.ToInt32(minc.Substring(1,2),16);
ming=Convert.ToInt32(minc.Substring(3,2),16);
minb=Convert.ToInt32(minc.Substring(5,2),16);

maxr=Convert.ToInt32(maxc.Substring(1,2),16);
maxg=Convert.ToInt32(maxc.Substring(3,2),16);
maxb=Convert.ToInt32(maxc.Substring(5,2),16);

r=Convert.ToString(int.Parse(Math.Round(((maxr-minr)*w)+minr).ToString()),16);
g=Convert.ToString(int.Parse(Math.Round(((maxg-ming)*w)+ming).ToString()),16);
b=Convert.ToString(int.Parse(Math.Round(((maxb-minb)*w)+minb).ToString()),16);

if(r.Length==1)
r="0"+r;
if(g.Length==1)
g="0"+g;
if(b.Length==1)
b="0"+b;

stringcolor;
color="#"+r+g+b;

returncolor;
}
}
}
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.ComponentModel;
using
System.Data;
using
System.Collections;
using
System.Text.RegularExpressions;
namespace
Conovosoft.Web.UI.WebControls
{
[ToolboxData("<{0}:SearchCloudrunat=server></{0}:SearchCloud>")]
publicclassSearchCloud:WebControl

{
"属性"#region"属性"

"Appearance"#region"Appearance"
[Bindable(true),Category("Appearance"),Localizable(true)]
publicintMinFontSize

{
get

{
strings=(string)ViewState["MinFontSize"];
if(String.IsNullOrEmpty(s))
return10;
else

{
intresult=10;
int.TryParse(s,outresult);
returnresult;
}
}
set

{
ViewState["MinFontSize"]=value;
}
}
[Bindable(true),Category("Appearance"),Localizable(true)]
publicintMaxFontSize

{
get

{
strings=(string)ViewState["MaxFontSize"];
if(String.IsNullOrEmpty(s))
return22;
else

{
intresult=22;
int.TryParse(s,outresult);
returnresult;
}
}
set

{
ViewState["MaxFontSize"]=value;
}
}
[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringFontUint

{
get

{
strings=(string)ViewState["FontUint"];
if(String.IsNullOrEmpty(s))
return"pt";
else
returns;
}
set

{
switch(value)

{
case"pt":
case"em":
case"%":
case"px":
ViewState["FontUnit"]=value;break;
default:
ViewState["FontUnit"]="px";break;
}
}
}
[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringMaxColor

{
get

{
strings=(string)ViewState["MaxColor"];
if(String.IsNullOrEmpty(s))
return"#00f";
else
returns;
}
set

{
ViewState["MaxColor"]=value;
}
}
[Bindable(true),Category("Appearance"),Localizable(true)]
publicstringMinColor

{
get

{
strings=(string)ViewState["MinColor"];
if(String.IsNullOrEmpty(s))
return"#000";
else
returns;
}
set

{
ViewState["MinColor"]=value;
}
}
#endregion

"Data"#region"Data"
[Bindable(true),Category("Data"),DefaultValue("")]
publicDataSetDataSource

{
get

{
return(DataSet)ViewState["DataSource"];
}
set

{
ViewState["DataSource"]=value;
}
}
[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataIDField

{
get

{
return(string)ViewState["DataIDField"];
}
set

{
ViewState["DataIDField"]=value;
}
}
[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataKeywordField

{
get

{
return(string)ViewState["DataKeywordField"];
}
set

{
ViewState["DataKeywordField"]=value;
}
}
[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataURLField

{
get

{
return(string)ViewState["DataURLField"];
}
set

{
ViewState["DataURLField"]=value;
}
}
[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringDataCountField

{
get

{
return(string)ViewState["DataCountField"];
}
set

{
ViewState["DataCountField"]=value;
}
}
[Bindable(true),Category("Data"),Localizable(true)]
publicstringKeywordTitleFormat

{
get

{
strings=(string)ViewState["KeywordTitleFormat"];
if(String.IsNullOrEmpty(s))

{
return"%koccured%ctimes";
}
else

{
return(string)ViewState["KeywordTitleFormat"];
}
}
set

{
ViewState["KeywordTitleFormat"]=value;
}
}
[Bindable(true),Category("Data"),Localizable(true)]
publicstringKeywordURLFormat

{
get

{
return(string)ViewState["KeywordURLFormat"];
}
set

{
ViewState["KeywordURLFormat"]=value;
}
}
[Bindable(true),Category("Data"),DefaultValue(""),Localizable(true)]
publicstringSortBy

{
get

{
return(string)ViewState["SortBy"];
}
set

{
ViewState["SortBy"]=value;
}
}
#endregion
[Bindable(false),Category("Debug"),DefaultValue(false),Localizable(true)]
publicBooleanDebug

{
get

{
if(ViewState["Debug"]!=null)

{
return(Boolean)ViewState["Debug"];
}
else

{
returnfalse;
}
}
set

{
ViewState["Debug"]=value;
}
}

PrivateProperties#regionPrivateProperties
privateHashtablearrAttributes;
privatestringCloudHTML

{
get

{
strings=(string)ViewState["CloudHTML"];
if(String.IsNullOrEmpty(s))

{
returnstring.Empty;
}
returns;
}
set

{
ViewState["CloudHTML"]=value;
}
}
privateHashtableKeyAttributes

{
get

{
returnarrAttributes;
}
set

{
arrAttributes=value;
}
}
#endregion
#endregion
protectedoverridevoidRender(HtmlTextWriterwriter)

{
if(!String.IsNullOrEmpty(CloudHTML))

{
writer.WriteBeginTag("div");
if(!String.IsNullOrEmpty(CssClass))

{
writer.WriteAttribute("class",CssClass);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(CloudHTML);
writer.WriteEndTag("div");
}
else

{
writer.Write("这儿没有产生HTML,一个未操作错误发生.");
}
}
protectedoverridevoidOnLoad(EventArgse)

{
if(DataSource==null)

{
CloudHTML="请指定DataSet";
return;
}
if(DataIDField==string.Empty)

{
CloudHTML="请指定一个ID数据段";
return;
}
if(DataKeywordField==string.Empty)

{
CloudHTML="请指定一个关键词数据段";
return;
}
if(DataCountField==string.Empty)

{
CloudHTML="请指定一个关键词数量数据段";
return;
}
if(!Regex.IsMatch(MinColor,"^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$"))

{
CloudHTML="最小颜色必须为十六进制编码并且必须为如:#000or#ff99cc";
return;
}
if(!Regex.IsMatch(MaxColor,"^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$"))

{
CloudHTML="最小颜色必须为十六进制编码并且必须为如:#000or#ff99cc";
return;
}
try

{
StringBuildersb=newStringBuilder();
DataViewdv=newDataView(DataSource.Tables[0]);
//DataRowViewrow;
dv.Sort=string.Format("{0}DESC",DataCountField);
intcount=dv.Count;
if(count==0)

{
CloudHTML="没有任何值产生云";
return;
}
intMaxQty=int.Parse(dv[0].Row[DataCountField].ToString());
intMinQty=int.Parse(dv[dv.Count-1].Row[DataCountField].ToString());
intSpread=MaxQty-MinQty;
if(Spread==0)
Spread=1;
intFontSpread=MaxFontSize-MinFontSize;
if(FontSpread==0)
FontSpread=1;
doubleFontStep=(double)(FontSpread)/Spread;
if(!string.IsNullOrEmpty(SortBy))

{
dv.Sort=SortBy;
}
else

{
dv.Sort=string.Format("{0}ASC",DataKeywordField);
}
foreach(DataRowViewrowindv)

{
intsKeyID=int.Parse(row.Row[DataIDField].ToString());
stringsKeyWord=row.Row[DataKeywordField].ToString();
intsKeyCount=int.Parse(row.Row[DataCountField].ToString());
stringsKeyURL;
stringColorRGB;
doubleWeight=MinFontSize+((sKeyCount-MinQty)*FontStep);
intFontDiff=MaxFontSize-MinFontSize;
doubleColorWeight=Math.Round(99*(Weight-MinFontSize)/(FontDiff)+1);
if(MinColor==MaxColor)

{
ColorRGB=MinColor;
}
else

{
ColorRGB=Colorize(MinColor,MaxColor,ColorWeight);
}
if(String.IsNullOrEmpty(DataURLField))

{
if(!String.IsNullOrEmpty(KeywordURLFormat))

{
sKeyURL=ReplaceKeyValues(KeywordURLFormat,sKeyID,sKeyWord,"",sKeyCount);
}
else

{
sKeyURL="#";
}
}
else

{
sKeyURL=row[DataURLField].ToString();
}
sb.Append(string.Format("<ahref=/"
{0}/"style=/"font-size:
{1}
{5};color:
{4};/"title=/"
{2}/"{6}>{3}</a>",
sKeyURL,
Math.Round(Weight),
ReplaceKeyValues(KeywordTitleFormat,sKeyID,sKeyWord,sKeyURL,sKeyCount),
HttpContext.Current.Server.HtmlEncode(sKeyWord),
ColorRGB,
FontUint,
GenerateAttributes(sKeyWord,sKeyID,sKeyURL,sKeyCount)));
}
CloudHTML=sb.ToString();
}
catch(Exceptionex)

{
if(!Debug)

{
CloudHTML="错误产生";
}
else

{
throwex;
}
}
finally

{
base.OnLoad(e);
}
}
publicvoidAddAttribute(stringvalue,stringtext)

{
if(KeyAttributes==null)

{
KeyAttributes=newHashtable();
}
KeyAttributes.Add(value,text);
}
privatestringGenerateAttributes(stringk,intid,stringu,intc)

{
if(KeyAttributes==null)

{
returnstring.Empty;
}
StringBuilders=newStringBuilder();
ICollectionkeys=KeyAttributes.Keys;
foreach(objectkeyinkeys)

{
s.Append(string.Format("{0}=/"
{1}/"",key,ReplaceKeyValues(KeyAttributes[key].ToString(),id,k,u,c)));
}
returns.ToString();
}
privatestringReplaceKeyValues(stringtxt,intid,stringk,stringu,intc)

{
k=k.Replace("'","'");
txt=txt.Replace("%i",id.ToString());
txt=txt.Replace("%k",HttpContext.Current.Server.HtmlEncode(k));
txt=txt.Replace("%u",u);
txt=txt.Replace("%c",c.ToString());
returntxt;
}
privatestringColorize(stringminc,stringmaxc,doublew)

{
w=w/100;
stringrs,gs,bs;
stringr,g,b;
intminr,ming,minb,maxr,maxg,maxb;
if(minc.Length==4)

{
rs=minc.Substring(1,1);
gs=minc.Substring(2,1);
bs=minc.Substring(3,1);
minc="#"+rs+rs+gs+gs+bs+bs;
}
if(maxc.Length==4)

{
rs=maxc.Substring(1,1);
gs=maxc.Substring(2,1);
bs=maxc.Substring(3,1);
maxc="#"+rs+rs+gs+gs+bs+bs;
}
minr=Convert.ToInt32(minc.Substring(1,2),16);
ming=Convert.ToInt32(minc.Substring(3,2),16);
minb=Convert.ToInt32(minc.Substring(5,2),16);
maxr=Convert.ToInt32(maxc.Substring(1,2),16);
maxg=Convert.ToInt32(maxc.Substring(3,2),16);
maxb=Convert.ToInt32(maxc.Substring(5,2),16);
r=Convert.ToString(int.Parse(Math.Round(((maxr-minr)*w)+minr).ToString()),16);
g=Convert.ToString(int.Parse(Math.Round(((maxg-ming)*w)+ming).ToString()),16);
b=Convert.ToString(int.Parse(Math.Round(((maxb-minb)*w)+minb).ToString()),16);
if(r.Length==1)
r="0"+r;
if(g.Length==1)
g="0"+g;
if(b.Length==1)
b="0"+b;
stringcolor;
color="#"+r+g+b;
returncolor;
}
}
}
626

被折叠的 条评论
为什么被折叠?



