zoukankan      html  css  js  c++  java
  • 【原创】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 --

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1589422.html
Copyright © 2011-2022 走看看