动态的显示一行多标题的自定义控件

花了一个下午,编了一个动态显示一行多标题的自定义控件。该控件实现的功能是:
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 ]

 

因为该控件不涉及前台设计,下面只提供该控件的后台

 

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>&nbsp;</span>";
                html += "<span class=" + _CssClass + "'><a href=" + dr["linkurl"+ ">" + dr["title"].ToString() + "</a>&nbsp;&nbsp;</span>";
                ii 
= ii + 1;
            }

            
if (rowNum == param.RowNum)
            
{
                
break;
            }

        }

        
if (rowNum< param.RowNum)
        
{
            rowNum 
+= 3;
            
while (rowNum < param.RowNum)
            
{
                html 
+= "</td></tr><tr><td>&nbsp;";
                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, 01);
    }


    
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; }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值