• 如此自动绑定数据到WebUI


      把数据绑定到控件,不知道大家用哪种方法?
      很早之前,我一般在aspx中放置控件,在后台的代码中用代码直接给相应的控件设置属性的值。这样的方法优点是灵活,可以依据业务逻辑,灵活的设置控件的Text以及Visible。示例如下:  
                <table>
                    
    <tr>
                        
    <td>
                            用户名
                        
    </td>
                        
    <td>
                            
    <asp:TextBox ID="tbName" runat="server" ></asp:TextBox>
                        
    </td>
                    
    </tr>
                
    </table>
    然后后台里写代码:
        protected User OperData
        
    {
            
    get;
            
    set;
        }


        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            
    if (!Page.IsPostBack)
            
    {
                
    this.tbName.Text = OperData.Name;
            }

        }

      不久之前,我发现在写好多字段的如果都这样写的话,会很累的,虽然效率会很高。所以我尝试采用如下的方式:
      尽可以的避免在代码中直接写来给控件属性设置值,而通过前台的绑定来实现,如:
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%#OperData.Name %>'></asp:TextBox>
    不过,这样的话,在后台也应该至少有一句绑定操作,像这样:
        protected void Page_Load(object sender, EventArgs e)
        
    {
            
    if (!Page.IsPostBack)
            
    {
                
    this.DataBind();
            }

        }

    虽然绑定上了,但这里有一个问题,我们的页面上的控件,不是都是在 !Page.IsPostBack这个条件的时候要绑定,也许还要有别的要求。还有,既然已经Page.IsPostBack也是条件,我们要是不用在后台代码里写this.DataBind不是更好吗?
      其实,说难也不难,我们来实现一个控件,这个控件用来自动绑定,且分条件的绑定。下面看下代码:
    namespace Iyond.Web.UI.WebControls
    {
        
    public class NullPanel : Panel
        
    {
            
    private bool _autoBind = true;

            
    public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
            
    {
                
    //因为NULL吗,所以什么也不输出
                
    //base.RenderBeginTag(writer);
            }


            
    public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
            
    {
                
    //因为NULL吗,所以什么也不输出
                
    //base.RenderEndTag(writer);
            }


            
    protected override System.Web.UI.HtmlTextWriterTag TagKey
            
    {
                
    get
                
    {
                    
    return System.Web.UI.HtmlTextWriterTag.Unknown;
                }

            }


            [DefaultValue(
    true)]
            
    public bool AutoBind
            
    {
                
    get
                
    {
                    
    return _autoBind;
                }

                
    set
                
    {
                    _autoBind 
    = value;
                }

            }


            
    protected override void OnLoad(EventArgs e)
            
    {
                
    base.OnLoad(e);
                
    //重置显示属性,好引发 OnPreRender
                this.Visible = true;
            }


            
    protected override void DataBindChildren()
            
    {
                
    //分条件绑定子控件,条件就是:
                if (this.Visible && this.AutoBind)
                
    {
                    
    base.DataBindChildren();
                }

            }


            
    protected override void OnPreRender(EventArgs e)
            
    {
                
    //在这里,我们要给数据绑定数据,不知道这个位置是不是最好
                if (this.AutoBind)
                
    {
                    
    this.DataBind();
                }


                
    base.OnPreRender(e);
            }

        }

    }

      有了上面这个控件,我现在可以像下面一样写代码:
    <asp:NullPanel ID="panelFenInfo" runat="server" 
            Visible
    ='<%#this.IsEditMode%>' >
      
    <asp:TextBox ID="tbName" runat="server" Text='<%#this.OperData.Name %>'></asp:TextBox>
    <asp:NullPanel>
    <asp:NullPanel ID="panelInfo" runat="server" 
            Visible
    ='<%#!Page.IsPostBack%>' >
      
    <asp:TextBox ID="tbCompany" runat="server" Text='<%#this.OperData.Name %>'></asp:TextBox>
    <asp:NullPanel>
    后台代码,这时就不用写了。
      写到这里,不知道大家看明白没有,我的文笔可真差,希望大家多在评论中指出。
  • 相关阅读:
    HDU 1402 A * B Problem Plus FFT
    HDU 4609 3-idiots FFT
    Hihocoder #1527 : 快速乘法 DP
    Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo DP+矩阵快速幂加速
    Codeforces 8VC Venture Cup 2016
    FFT做题记录
    Hackrank Candies DP
    git submodule update --init --recursive
    慢慢长大
    protobuf
  • 原文地址:https://www.cnblogs.com/evlon/p/705828.html
Copyright © 2020-2023  润新知