C#自定义评分控件

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Collections.Specialized;


namespace WebControlLibrary
{
    [DefaultProperty("Text"), ToolboxData("<{0}:ImitateInputCalendar runat=server></{0}:ImitateInputCalendar>")]

    public class myImitateInputCalendar : System.Web.UI.WebControls.WebControl, IPostBackDataHandler
    {
        #region 公共属性
        private string size;
 
  [Bindable(true),Category("Appearance"),DefaultValue("")]
  
        public string Text
  {
   get
   {
    if (ViewState["Text"] != null)
    {
     return ViewState["Text"].ToString();
    }
    else
    {
     return null;
    }
   }

   set
   {
    ViewState["Text"] = value;
   }
  }

  [Bindable(true),Category("Appearance"),DefaultValue("")]

  public string Size
  {
   get
   {
    return size;
   }

   set
   {
    size = value;
   }
        }
        #endregion

        /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>
  protected override void Render(HtmlTextWriter output)
  {
   output.AddAttribute(HtmlTextWriterAttribute.Id,"score");
   output.AddAttribute(HtmlTextWriterAttribute.Name,this.ID);
   if (this.CssClass != ""){output.AddAttribute(HtmlTextWriterAttribute.Class,this.CssClass);}
   if (this.Text != "" && this.Text != null){output.AddAttribute(HtmlTextWriterAttribute.Value,this.Text);}
   if (this.Size != "" && this.Size != null){output.AddAttribute(HtmlTextWriterAttribute.Size,this.Size);}
   output.AddAttribute(HtmlTextWriterAttribute.Style,"cursor:hand");
   output.AddAttribute(HtmlTextWriterAttribute.Type,"text");
   output.AddAttribute(HtmlTextWriterAttribute.ReadOnly,"true");
   output.AddAttribute(HtmlTextWriterAttribute.Onclick,"javascript:this.focus()");
   output.AddAttribute("onFocus","fPopCalendar(this,this,PopCal); return false;");
   output.RenderBeginTag(HtmlTextWriterTag.Input);
   output.RenderEndTag();

            if (!this.Page.IsClientScriptBlockRegistered("clientScript"))
   {
    output.WriteLine("<script language=/"JavaScript/">");

                #region js args
                output.WriteLine("var gdCtrl = new Object();");
                output.WriteLine("var VicPopCal = new Object();"); 
                output.WriteLine("var gcGray = /"#808080/";");   
                output.WriteLine("var gcToggle = /"pink/";");  //鼠标所在日期单元格的底色
                output.WriteLine("var gcBG = /"blue/";");      //背景色
                #endregion

                output.WriteLine("function fPopCalendar(popCtrl, dateCtrl, popCal){");
                //取消js冒泡
                output.WriteLine("parent.event.cancelBubble=true;");
                output.WriteLine("VicPopCal = popCal;");               
                output.WriteLine("gdCtrl = dateCtrl;");
                //得到一个point对象,由fGetXY(aTag)函数初始化,fGetXY(aTag)依赖function Point(iX, iY)。
                output.WriteLine("var point = fGetXY(popCtrl);");
                output.WriteLine("with (VicPopCal.style) {left = point.x;top = point.y+popCtrl.offsetHeight+1;visibility = 'visible';}");
                output.WriteLine("VicPopCal.focus();");
                output.WriteLine("}");

                #region 鼠标异动到某对象上的一系列函数,改变单元格的样式。
                //鼠标指向图标范围
                output.WriteLine("function mouseover(obj){");
                //output.WriteLine("obj.style.borderTop = 'buttonshadow 1px solid';");
                //output.WriteLine("obj.style.borderLeft = 'buttonshadow 1px solid';");
                //output.WriteLine("obj.style.borderRight = 'buttonhighlight 1px solid';");
                //output.WriteLine("obj.style.borderBottom = 'buttonhighlight 1px solid';");
                output.WriteLine("}");

                //鼠标移出图标范围
                output.WriteLine("function mouseout(obj){");
                //output.WriteLine("obj.style.borderTop = 'buttonhighlight 1px solid';");
                //output.WriteLine("obj.style.borderLeft = 'buttonhighlight 1px solid';");
                //output.WriteLine("obj.style.borderRight = 'buttonshadow 1px solid';");
                //output.WriteLine("obj.style.borderBottom = 'buttonshadow 1px solid';");
                output.WriteLine("}");

                //鼠标按下
                output.WriteLine("function mousedown(obj){");
                output.WriteLine("obj.style.borderTop = 'buttonshadow 1px solid';");
                output.WriteLine("obj.style.borderLeft = 'buttonshadow 1px solid';");
                output.WriteLine("obj.style.borderRight = 'buttonhighlight 1px solid';");
                output.WriteLine("obj.style.borderBottom = 'buttonhighlight 1px solid';");
                output.WriteLine("}");

                //鼠标抬起
                output.WriteLine("function mouseup(obj){");
                output.WriteLine("obj.style.borderTop = 'buttonhighlight 1px solid';");
                output.WriteLine("obj.style.borderLeft = 'buttonhighlight 1px solid';");
                output.WriteLine("obj.style.borderRight = 'buttonshadow 1px solid';");
                output.WriteLine("obj.style.borderBottom = 'buttonshadow 1px solid';");
                output.WriteLine("}");
                #endregion

                #region 获得选中的单元格,并且传递其值到fSetValue(value)函数。
                output.WriteLine("function fSetSelected(aCell){");
                output.WriteLine("gdCtrl.value = aCell.value;");
                output.WriteLine("VicPopCal.style.visibility = /"hidden/";");
                output.WriteLine("}");
                #endregion

                output.WriteLine("function Point(iX, iY){this.x = iX;this.y = iY;}");//定义point

                #region 初始化图形函数
                output.WriteLine("function fDrawCal(TotalScore,Distance){");
                output.WriteLine("var totalTD = TotalScore / Distance;var MaxColumnNum = 4;var totalTR = Math.round(totalTD / MaxColumnNum);var otd = new Array();var tab = document.getElementById('tab');var score = 0;");
                output.WriteLine("for(i=0;i<totalTR;i++){var otr=tab.insertRow(-1);");
                output.WriteLine("for(j=0;j<MaxColumnNum&&j<totalTD;j++){otd[j]=otr.insertCell(-1);");
                output.WriteLine("otd[j].innerHTML='<input id=/"calCell/" type=/"text/" class=/"txt/" name=/"infoName_txt/" maxlength=/"2/" size=/"2/" value=/"/" style/"+styleTD+/" οnmοuseοver=/"mouseover(this)/" οnmοuseοut=/"mouseout(this)/" οnmοusedοwn=/"mousedown(this)/" οnmοuseup=/"mouseup(this)/" readonly=/"true/" οnclick=/"fSetSelected(this)/" />'");
                output.WriteLine("otd[j].childNodes[0].value=score+=Distance;");
                output.WriteLine("}}}");
                #endregion

                #region 得到鼠标的位置
                output.WriteLine("function fGetXY(aTag){");
                output.WriteLine("var oTmp = aTag;");
                output.WriteLine("var pt = new Point(0,0);");
                output.WriteLine("do {");
                output.WriteLine("pt.x += oTmp.offsetLeft;");
                output.WriteLine("pt.y += oTmp.offsetTop;");
                output.WriteLine("oTmp = oTmp.offsetParent;");
                output.WriteLine("} while(oTmp.tagName!=/"BODY/");");
                output.WriteLine("return pt;");
                output.WriteLine("}");
                #endregion

                #region 评分体
                output.WriteLine("with (document){");
                output.WriteLine("write(/"<Div id='PopCal' οnclick='event.cancelBubble=true' style='POSITION:absolute; VISIBILITY: hidden; bordercolor:#000000;border:2px ridge;width:10;z-index:100;'>/");");
                output.WriteLine("write(/"<TABLE id='popTable' border='1' bgcolor='#eeede8' cellpadding='0' cellspacing='0' style='font-size:12px;Z-INDEX:202;position:absolute;top:0;left:0;'>/");");
                output.WriteLine("write(/"<TR>/");");
                output.WriteLine("write(/"<td valign='middle' align='center' style='cursor:default'>/");");
                output.WriteLine("write(/"</td></TR><TR><td align='center'>/");");
                output.WriteLine("write(/"<DIV style='background-color:teal;'><table id='tab' width='100%' border='0' bgcolor='#E6EAE9' cellpadding='0' cellspacing='0'>/");");
                output.WriteLine("fDrawCal(100,5);");//这里要给出tr和td。
                output.WriteLine("write(/"</table></DIV>/");");
                output.WriteLine("write(/"</td></TR></TABLE>/");");
                output.WriteLine("write(/"</Div>/");");
                output.WriteLine("}");
                #endregion 评分体

                output.WriteLine("</script>");
    this.Page.RegisterClientScriptBlock("clientScript", "");
                /*
                 RegisterStartupScript      把script放置在 ASP.NET page的底部
                 RegisterClientScriptBlock  把script放置在 ASP.NET page的顶部。
                 */
            }
  }

  #region IPostBackDataHandler 成员
  
  public event EventHandler TextChanged;
  /// <summary>
  /// 当由类实现时,为 ASP.NET 服务器控件处理回发数据。
  /// </summary>
  /// <param name="postDataKey">控件的主要标识符</param>
  /// <param name="postCollection">所有传入名称值的集合</param>
  /// <returns>如果服务器控件的状态在回发发生后更改,则为 true;否则为 false。</returns>
  public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
  {
   String presentValue = Text;
   String postedValue = postCollection[postDataKey];

   if (presentValue == null || !presentValue.Equals(postedValue))
   {
    Text = postedValue;
    return true;
   }

   return false;
  }

     
  /// <summary>
  /// 当由类实现时,用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。
  /// </summary>
  public virtual void RaisePostDataChangedEvent()
  {
   OnTextChanged(EventArgs.Empty);
  }
     

  protected virtual void OnTextChanged(EventArgs e)
  {
   if (TextChanged != null)
    TextChanged(this,e);
  }
  #endregion
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值