• 【原创】ASP.NET 学习(2)


    Abstract:

    通过一个简单的 web application, 学习以下内容:

    (1) ListView control

    (2) User control

    (3) Handle ViewState in User control

    (4) FindControl() usage, especially when there is a Master page.

    本文主要讲述第二部分,即User Control的用法

    需求背景:

    如果想把列Pass Rate由现在的单纯的数字表示转换成进度条显示,该怎么办?

    飞信截屏未命名2 

    ====>

    飞信截屏未命名3

    这个进度条可以通过创建一个Web User Control来实现。

    1. 首先给项目增加一个Web User Control 文件 PassRateProgressBar.ascx

      

    2. 在PassRateProgressBar.aspx中增加下面代码,

       因为需要根据数值的不同调整进度条的绘制,因此div的style需要动态设定,所以需要在code behind的文件中实现相应的方法。

       1: <div>
       2:     <table>
       3:     <tr>
       4:       <td style="border-0">
       5:         <div style="<%=GetContainerStyle()%>">
       6:             <div style="<%=GetPrograssStyle()%>"></div>
       7:         </div>
       8:       </td>
       9:       <td style="border-0"><span><%=Percentage%></span></td>
      10:     </tr>
      11:     </table>
      12: </div>

    3. 对应的PassRateProgressBar.aspx.cs文件中相关代码如下,

       1: public string Width { get; set; }
       2:  
       3: public string Height { get; set; }
       4:  
       5: public string Percentage { get; set; }
       6:  
       7: public string GetContainerStyle()
       8: {
       9:     if (string.IsNullOrEmpty(Width))
      10:     {
      11:         Width = "100px";
      12:     }
      13:  
      14:     return string.Format("border:solid 1px #b4b4b4; text-align:left; {0}", Width);
      15: }
      16:  
      17: public string GetPrograssStyle()
      18: {
      19:     if (string.IsNullOrEmpty(Percentage))
      20:     {
      21:         Percentage = "0";
      22:     }
      23:  
      24:     if (string.IsNullOrEmpty(Width))
      25:     {
      26:         Width = "100px";
      27:     }
      28:  
      29:     if (string.IsNullOrEmpty(Height))
      30:     {
      31:         Height = "20px";
      32:     }
      33:  
      34:     string aStyle = string.Format("background-color:Green; height:{0};", Height);
      35:     try
      36:     {
      37:         int aWidth = int.Parse(Width.Substring(0, Width.Length - 2));
      38:         double aPercent = double.Parse(Percentage.TrimEnd(' ', '%'));
      39:         double aProgWidth = (aPercent * aWidth) / 100;
      40:         aProgWidth = aProgWidth < 0 ? 0 : aProgWidth;
      41:         aProgWidth = aProgWidth > aWidth ? aWidth : aProgWidth;
      42:  
      43:         return string.Format("{0} {1}px", aStyle, aProgWidth);
      44:     }
      45:     catch
      46:     {
      47:         return aStyle;
      48:     }
      49: }

    4. 把这个自定义的控件加入到default.aspx 页面中,首先需要在default.aspx页面中注册这个控件,然后才可以用

       <%@ Register Src="~/PassRateProgressBar.ascx" TagPrefix="local" TagName="ProgressBar"%>
    

    5.  把原来的Pass Rate列改成用这个自定义的控件来代替

    <td>

    <local:ProgressBar runat="server" Width="80px" Height="15px" Percentage='<%# Eval("PassRate") %>'/>

    </td>

      因为这个也是服务器端控件,需要加上 runat="server" 

      在step 4中,设置了这个空间的TagPrefix和TagName,所以这里面可以像用其他标准ASP.NET Server Control那样来使用这个自定义的control.

    至此,开篇提到的需求基本满足了,但是这个自定义控件还有一个问题没有解决,就是状态保存问题。这个问题在下一篇中解决。

    -- To Be Continued --

  • 相关阅读:
    json、txt、xlsx
    word-排版准备与文字清洗
    运营能力分析
    获利能力分析
    偿债能力分析
    现金流量表结构分析
    负债项目分析
    资产负债表分析
    财务报表的分析
    会计电算化账务处理流程8
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1589422.html
Copyright © 2020-2023  润新知