花了一个下午,编了一个动态显示一行多标题的自定义控件。该控件实现的功能是:
1、控件的参数配置储存在数据库;
2、自定义实现控件的宽度和长度;
3、自定义的字体的大小、是否粗体(其他样式可以自行扩展);
4、根据字体的个数,大小和控件的宽度,自动的调整一行显示标题的个数;
5、实现的功能主要是方便编辑进行编辑。
数据库
USE
[
CYZone2
]
GO
/**/ /****** 对象: Table [dbo].[CommendParam] 脚本日期: 08/07/2007 17:24:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [ dbo ] . [ CommendParam ] (
[ PlateID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,
[ PlateName ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_PlateName ] DEFAULT ( '' ),
[ IsBold ] [ bit ] NULL CONSTRAINT [ DF_CommendParam_IsBold ] DEFAULT (( 0 )),
[ IsItalics ] [ bit ] NULL CONSTRAINT [ DF_CommendParam_IsItalics ] DEFAULT (( 0 )),
[ Width ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_Width ] DEFAULT ( '' ),
[ Heiht ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_Heiht ] DEFAULT ( '' ),
[ RowNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_RowNum ] DEFAULT (( 0 )),
[ WordNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_WordNum ] DEFAULT (( 0 )),
[ FontSize ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_FontSize ] DEFAULT ( '' ),
[ TitleNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_TitleNum ] DEFAULT (( 0 )),
[ ClassID ] [ int ] NULL CONSTRAINT [ DF_CommendParam_ClassID ] DEFAULT (( 0 )),
CONSTRAINT [ PK_CommendParam ] PRIMARY KEY CLUSTERED
(
[ PlateID ] ASC
) WITH (PAD_INDEX = OFF , IGNORE_DUP_KEY = OFF ) ON [ PRIMARY ]
) ON [ PRIMARY ]
GO
/**/ /****** 对象: Table [dbo].[CommendParam] 脚本日期: 08/07/2007 17:24:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [ dbo ] . [ CommendParam ] (
[ PlateID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,
[ PlateName ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_PlateName ] DEFAULT ( '' ),
[ IsBold ] [ bit ] NULL CONSTRAINT [ DF_CommendParam_IsBold ] DEFAULT (( 0 )),
[ IsItalics ] [ bit ] NULL CONSTRAINT [ DF_CommendParam_IsItalics ] DEFAULT (( 0 )),
[ Width ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_Width ] DEFAULT ( '' ),
[ Heiht ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_Heiht ] DEFAULT ( '' ),
[ RowNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_RowNum ] DEFAULT (( 0 )),
[ WordNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_WordNum ] DEFAULT (( 0 )),
[ FontSize ] [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [ DF_CommendParam_FontSize ] DEFAULT ( '' ),
[ TitleNum ] [ int ] NULL CONSTRAINT [ DF_CommendParam_TitleNum ] DEFAULT (( 0 )),
[ ClassID ] [ int ] NULL CONSTRAINT [ DF_CommendParam_ClassID ] DEFAULT (( 0 )),
CONSTRAINT [ PK_CommendParam ] PRIMARY KEY CLUSTERED
(
[ PlateID ] ASC
) WITH (PAD_INDEX = OFF , IGNORE_DUP_KEY = OFF ) ON [ PRIMARY ]
) ON [ PRIMARY ]
因为该控件不涉及前台设计,下面只提供该控件的后台
public
partial
class
Controls_Home_AticleView : System.Web.UI.UserControl
... {
private int pid;
/**//// <summary>
/// 推荐文章的分类ID
/// </summary>
public int PID
...{
set ...{ pid = value; }
}
//private string _FontSize;
/**////// <summary>
///// 字体大小
///// </summary>
//public string FontSize
//{
// set { _FontSize = value; }
//}
private string _CssClass;
/**//// <summary>
/// CSS样式
/// </summary>
public string CssClass
...{
set ...{ _CssClass = value; }
}
private string _StartRow = "1";
/**//// <summary>
/// 开始行,默认1
/// </summary>
public string StartRow
...{
set ...{ _StartRow = value; }
}
CommendParam bll = new CommendParam();
protected void Page_Load(object sender, EventArgs e)
...{
CommendParamInfo param = new CommendParamInfo();
//该函数主要实现获取数据表中的参数信息
param = bll.GetPlateParam(pid);
//该函数主要实现获取相关的文章
DataSet ds = bll.GetCOmmendArticle(param.ClassID, pid, int.Parse(_StartRow));
int len = ds.Tables[0].Rows.Count;
int[] arr = new int[len];
for (int i = 0; i < len; i++)
...{
DataRow dr = ds.Tables[0].NewRow();
dr = ds.Tables[0].Rows[i];
string title = dr["title"].ToString();
int num = title.Length;
int titlewidth = num * int.Parse(param.FontSize);
if (titlewidth > int.Parse(param.Width))
...{
dr["title"] = StringUtil.GetSubString(title, param.WordNum);
string t = dr["title"].ToString();
arr[i] = t.Length * int.Parse(param.FontSize);
}
else
...{
arr[i] = titlewidth + 1;
}
}
int ii = 0;
int rowNum = 1;
int rowlen = 0;
string html = "<table><tr><td class='" + _CssClass + "'>";
for (int i = 0; i < len; i++)
...{
rowlen += arr[ii];
if (rowlen > int.Parse(param.Width))
...{
html += "</td></tr><tr><td class='" + _CssClass + "'>";
rowlen = 0;
rowNum += 1;
i = i - 1;
}
else
...{
DataRow dr = ds.Tables[0].NewRow();
dr = ds.Tables[0].Rows[i];
//html += "<span style='font-size:" + param.FontSize + "px;'><a href=" + dr["linkurl"] + ">" + dr["title"].ToString() + "</a> </span>";
html += "<span class=" + _CssClass + "'><a href=" + dr["linkurl"] + ">" + dr["title"].ToString() + "</a> </span>";
ii = ii + 1;
}
if (rowNum == param.RowNum)
...{
break;
}
}
if (rowNum< param.RowNum)
...{
rowNum += 3;
while (rowNum < param.RowNum)
...{
html += "</td></tr><tr><td> ";
rowNum += 1;
}
}
html += "</td></tr></table>";
this.divshow.InnerHtml = html;
//Response.Write(html);
}
}
... {
private int pid;
/**//// <summary>
/// 推荐文章的分类ID
/// </summary>
public int PID
...{
set ...{ pid = value; }
}
//private string _FontSize;
/**////// <summary>
///// 字体大小
///// </summary>
//public string FontSize
//{
// set { _FontSize = value; }
//}
private string _CssClass;
/**//// <summary>
/// CSS样式
/// </summary>
public string CssClass
...{
set ...{ _CssClass = value; }
}
private string _StartRow = "1";
/**//// <summary>
/// 开始行,默认1
/// </summary>
public string StartRow
...{
set ...{ _StartRow = value; }
}
CommendParam bll = new CommendParam();
protected void Page_Load(object sender, EventArgs e)
...{
CommendParamInfo param = new CommendParamInfo();
//该函数主要实现获取数据表中的参数信息
param = bll.GetPlateParam(pid);
//该函数主要实现获取相关的文章
DataSet ds = bll.GetCOmmendArticle(param.ClassID, pid, int.Parse(_StartRow));
int len = ds.Tables[0].Rows.Count;
int[] arr = new int[len];
for (int i = 0; i < len; i++)
...{
DataRow dr = ds.Tables[0].NewRow();
dr = ds.Tables[0].Rows[i];
string title = dr["title"].ToString();
int num = title.Length;
int titlewidth = num * int.Parse(param.FontSize);
if (titlewidth > int.Parse(param.Width))
...{
dr["title"] = StringUtil.GetSubString(title, param.WordNum);
string t = dr["title"].ToString();
arr[i] = t.Length * int.Parse(param.FontSize);
}
else
...{
arr[i] = titlewidth + 1;
}
}
int ii = 0;
int rowNum = 1;
int rowlen = 0;
string html = "<table><tr><td class='" + _CssClass + "'>";
for (int i = 0; i < len; i++)
...{
rowlen += arr[ii];
if (rowlen > int.Parse(param.Width))
...{
html += "</td></tr><tr><td class='" + _CssClass + "'>";
rowlen = 0;
rowNum += 1;
i = i - 1;
}
else
...{
DataRow dr = ds.Tables[0].NewRow();
dr = ds.Tables[0].Rows[i];
//html += "<span style='font-size:" + param.FontSize + "px;'><a href=" + dr["linkurl"] + ">" + dr["title"].ToString() + "</a> </span>";
html += "<span class=" + _CssClass + "'><a href=" + dr["linkurl"] + ">" + dr["title"].ToString() + "</a> </span>";
ii = ii + 1;
}
if (rowNum == param.RowNum)
...{
break;
}
}
if (rowNum< param.RowNum)
...{
rowNum += 3;
while (rowNum < param.RowNum)
...{
html += "</td></tr><tr><td> ";
rowNum += 1;
}
}
html += "</td></tr></table>";
this.divshow.InnerHtml = html;
//Response.Write(html);
}
}
其中涉及到的模型和函数
public
class
CommendParam : GetCN
... {
private SqlDataReader rdr = null;
private DataSet ds = null;
public CommendParam()
...{ }
public CommendParamInfo GetPlateParam(int plateID)
...{
CommendParamInfo param = null;
string sql = "select * from CommendParam where PlateID=" + plateID;
try
...{
rdr = RunReaderSql(sql);
while (rdr.Read())
...{
param = new CommendParamInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetBoolean(2), rdr.GetBoolean(3),
rdr.GetString(4), rdr.GetString(5), rdr.GetInt32(6), rdr.GetInt32(7), rdr.GetString(8),
rdr.GetInt32(9), rdr.GetInt32(10));
}
rdr.Close();
rdr.Dispose();
if (param != null)
...{
return param;
}
else
...{
return null;
}
}
catch ...{ return null; }
}
public DataSet GetCOmmendArticle(int classID,int pid,int num,int startrow)
...{
string sql = "";
if (num > 0)
...{
sql = "select top " + num + " id,title,linkurl,ImgUrl from Commend_Article where is_del=0 and ClassSmallId=" + classID;
}
else
...{
sql = "select id,title,linkurl,ImgUrl from Commend_Article where is_del=0 and ClassSmallId=" + classID;
}
if (startrow > 1)
...{
sql = sql + " and id not in (select top " + startrow + " id from Commend_Article where is_del=0 and ClassSmallId=" + classID + ")";
}
sql = sql + " order by gradation desc,createtime desc";
DataSet ds = new DataSet();
try
...{
ds = RunSql(sql);
return ds;
}
catch ...{ return null; }
}
public DataSet GetCOmmendArticle(int classID,int pid)
...{
return GetCOmmendArticle(classID, pid, 0, 1);
}
public DataSet GetCOmmendArticle(int classID, int pid, int startRow)
...{
return GetCOmmendArticle(classID, pid, 0, startRow);
}
}
public class CommendParamInfo
... {
private int _PlateID;
private string _PlateName;
private bool _IsBold;
private bool _IsItalics;
private string _Width;
private string _Height;
private int _RowNum;
private int _WordNum;
private string _FontSize;
private int _TitleNum;
private int _ClassID;
public CommendParamInfo()
...{
}
/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="plateid">版块ID</param>
/// <param name="platename">版块名称</param>
/// <param name="isbold">是否粗体</param>
/// <param name="isitalics">是否斜体</param>
/// <param name="width">版块宽度</param>
/// <param name="height">版块高度</param>
/// <param name="rownum">版块行数</param>
/// <param name="wordnum">标题最长字数</param>
/// <param name="fontsize"> 字体大小</param>
/// <param name="titlenum">标题个数</param>
/// <param name="classid">标题分类ID</param>
public CommendParamInfo(int plateid, string platename, bool isbold, bool isitalics, string width, string height, int rownum, int wordnum, string fontsize, int titlenum,int classid)
...{
this._PlateID = plateid;
this._PlateName = platename;
this._IsBold = isbold;
this._IsItalics = isitalics;
this._Width = width;
this._Height = height;
this._RowNum = rownum;
this._WordNum = wordnum;
this._FontSize = fontsize;
this._TitleNum = titlenum;
this._ClassID = classid;
}
/**//// <summary>
/// 版块ID
/// </summary>
public int PlateID
...{
get ...{ return _PlateID; }
set ...{ _PlateID = value; }
}
/**//// <summary>
/// 版块名称
/// </summary>
public string PlateName
...{
get ...{ return _PlateName; }
set ...{ _PlateName = value; }
}
/**//// <summary>
/// 是否粗体
/// </summary>
public bool IsBold
...{
get ...{ return _IsBold; }
set ...{ _IsBold = value; }
}
/**//// <summary>
/// 是否斜体
/// </summary>
public bool IsItalic
...{
get ...{ return _IsItalics; }
set ...{ _IsItalics = value; }
}
/**//// <summary>
/// 版块宽度
/// </summary>
public string Width
...{
get ...{ return _Width; }
set ...{ _Width = value; }
}
/**//// <summary>
/// 版块高度
/// </summary>
public string Heiht
...{
get ...{ return _Height; }
set ...{ _Height = value; }
}
/**//// <summary>
/// 版块行数
/// </summary>
public int RowNum
...{
get ...{ return _RowNum; }
set ...{ _RowNum = value; }
}
/**//// <summary>
/// 标题最长字数
/// </summary>
public int WordNum
...{
get ...{ return _WordNum; }
set ...{ _WordNum = value; }
}
/**//// <summary>
/// 字体大小
/// </summary>
public string FontSize
...{
get ...{ return _FontSize; }
set ...{ _FontSize = value; }
}
/**//// <summary>
/// 标题个数
/// </summary>
public int TitleNum
...{
get ...{ return _TitleNum; }
set ...{ _TitleNum = value; }
}
/**//// <summary>
/// 标题分类ID
/// </summary>
public int ClassID
...{
get ...{ return _ClassID; }
set ...{ _ClassID = value; }
}
}
... {
private SqlDataReader rdr = null;
private DataSet ds = null;
public CommendParam()
...{ }
public CommendParamInfo GetPlateParam(int plateID)
...{
CommendParamInfo param = null;
string sql = "select * from CommendParam where PlateID=" + plateID;
try
...{
rdr = RunReaderSql(sql);
while (rdr.Read())
...{
param = new CommendParamInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetBoolean(2), rdr.GetBoolean(3),
rdr.GetString(4), rdr.GetString(5), rdr.GetInt32(6), rdr.GetInt32(7), rdr.GetString(8),
rdr.GetInt32(9), rdr.GetInt32(10));
}
rdr.Close();
rdr.Dispose();
if (param != null)
...{
return param;
}
else
...{
return null;
}
}
catch ...{ return null; }
}
public DataSet GetCOmmendArticle(int classID,int pid,int num,int startrow)
...{
string sql = "";
if (num > 0)
...{
sql = "select top " + num + " id,title,linkurl,ImgUrl from Commend_Article where is_del=0 and ClassSmallId=" + classID;
}
else
...{
sql = "select id,title,linkurl,ImgUrl from Commend_Article where is_del=0 and ClassSmallId=" + classID;
}
if (startrow > 1)
...{
sql = sql + " and id not in (select top " + startrow + " id from Commend_Article where is_del=0 and ClassSmallId=" + classID + ")";
}
sql = sql + " order by gradation desc,createtime desc";
DataSet ds = new DataSet();
try
...{
ds = RunSql(sql);
return ds;
}
catch ...{ return null; }
}
public DataSet GetCOmmendArticle(int classID,int pid)
...{
return GetCOmmendArticle(classID, pid, 0, 1);
}
public DataSet GetCOmmendArticle(int classID, int pid, int startRow)
...{
return GetCOmmendArticle(classID, pid, 0, startRow);
}
}
public class CommendParamInfo
... {
private int _PlateID;
private string _PlateName;
private bool _IsBold;
private bool _IsItalics;
private string _Width;
private string _Height;
private int _RowNum;
private int _WordNum;
private string _FontSize;
private int _TitleNum;
private int _ClassID;
public CommendParamInfo()
...{
}
/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="plateid">版块ID</param>
/// <param name="platename">版块名称</param>
/// <param name="isbold">是否粗体</param>
/// <param name="isitalics">是否斜体</param>
/// <param name="width">版块宽度</param>
/// <param name="height">版块高度</param>
/// <param name="rownum">版块行数</param>
/// <param name="wordnum">标题最长字数</param>
/// <param name="fontsize"> 字体大小</param>
/// <param name="titlenum">标题个数</param>
/// <param name="classid">标题分类ID</param>
public CommendParamInfo(int plateid, string platename, bool isbold, bool isitalics, string width, string height, int rownum, int wordnum, string fontsize, int titlenum,int classid)
...{
this._PlateID = plateid;
this._PlateName = platename;
this._IsBold = isbold;
this._IsItalics = isitalics;
this._Width = width;
this._Height = height;
this._RowNum = rownum;
this._WordNum = wordnum;
this._FontSize = fontsize;
this._TitleNum = titlenum;
this._ClassID = classid;
}
/**//// <summary>
/// 版块ID
/// </summary>
public int PlateID
...{
get ...{ return _PlateID; }
set ...{ _PlateID = value; }
}
/**//// <summary>
/// 版块名称
/// </summary>
public string PlateName
...{
get ...{ return _PlateName; }
set ...{ _PlateName = value; }
}
/**//// <summary>
/// 是否粗体
/// </summary>
public bool IsBold
...{
get ...{ return _IsBold; }
set ...{ _IsBold = value; }
}
/**//// <summary>
/// 是否斜体
/// </summary>
public bool IsItalic
...{
get ...{ return _IsItalics; }
set ...{ _IsItalics = value; }
}
/**//// <summary>
/// 版块宽度
/// </summary>
public string Width
...{
get ...{ return _Width; }
set ...{ _Width = value; }
}
/**//// <summary>
/// 版块高度
/// </summary>
public string Heiht
...{
get ...{ return _Height; }
set ...{ _Height = value; }
}
/**//// <summary>
/// 版块行数
/// </summary>
public int RowNum
...{
get ...{ return _RowNum; }
set ...{ _RowNum = value; }
}
/**//// <summary>
/// 标题最长字数
/// </summary>
public int WordNum
...{
get ...{ return _WordNum; }
set ...{ _WordNum = value; }
}
/**//// <summary>
/// 字体大小
/// </summary>
public string FontSize
...{
get ...{ return _FontSize; }
set ...{ _FontSize = value; }
}
/**//// <summary>
/// 标题个数
/// </summary>
public int TitleNum
...{
get ...{ return _TitleNum; }
set ...{ _TitleNum = value; }
}
/**//// <summary>
/// 标题分类ID
/// </summary>
public int ClassID
...{
get ...{ return _ClassID; }
set ...{ _ClassID = value; }
}
}