当前位置:编程学习 > C#/ASP.NET >>

asp.net如何在运行时,根据控件的属性名动态的添加控件的属性?

问题描述:要实现的功能很简单,就是根据checkboxlist中选择的值,设置label的一些属性。但是我想不用硬编码Label1.Font.Bold这种方式,而是根据item的value动态设置。代码如下:

foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected==true)
            {
//item.Value的值为Bold。通过item.Value可以得知我是想设置Label1.Font的Bold 为 true。
            Label1.Font.Bold = true;//硬编码。这个当然可以
//但是我想通过item.Value获取的值动态的设置,而不是硬编码代码中。于是想用下面的方法:
                string ff =item.Value; //用ff代替bold,拼出Label1.Font.Bold  
                Label1.Font.ff = true;//这个为什么不行呀??有没有类似的解决方法??
            }
        }

试验过的其它方法:
    通过Table1.Attributes.Add("style", " text-align:center;")可以设置表中文字的对齐方式为居中。是在HTML中加了sytle属性。
    然后我就想通过此方法给label控件加上Font-Underline="True";写法为Label1.Attributes.Add("Font-Underline", "True");结果,属性还是加到html中了,有没有一个方法可以给web控件加属性呀!
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- Label1.Text =item.Value; 

Label1.Font.Bold = true; --------------------编程问答-------------------- 还得硬编码,switch把各种情况考虑了 --------------------编程问答-------------------- 折腾了一天,终于弄出来了,用的反射。感觉如果有个类似label1.font["Bold"]就方便多了。
代码如下:
aspx代码:
 <asp:Label ID="Label1" runat="server" Text="00000000"></asp:Label>     
        <asp:CheckBoxList ID="CheckBoxList1" runat="server" 
            RepeatDirection="Horizontal">
            <asp:ListItem>Bold</asp:ListItem>
            <asp:ListItem>Italic</asp:ListItem>
            <asp:ListItem>Strikeout</asp:ListItem>
            <asp:ListItem>Overline</asp:ListItem>
        </asp:CheckBoxList>   
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

cs代码:
 protected void Button1_Click(object sender, EventArgs e)
    {
        
        Type tyOfLbl = Label1.GetType();
        PropertyInfo[] lblProperties = tyOfLbl.GetProperties();
        foreach (PropertyInfo lblProperty in lblProperties)
        {
          //这里只是设置font的属性,如果要设置text的属性的话,再加上if (lblProperty.Name=="Text"){}
            if (lblProperty.Name=="Font")
            {
                Type lblfont = Label1.Font.GetType();
                PropertyInfo[] lblfontProperties = lblfont.GetProperties();
                foreach (PropertyInfo lblFontProperty in lblfontProperties)
                {                    
                    if (CheckBoxList1.Items.FindByValue(lblFontProperty.Name) != null)//这句一定要加上,否则出错,对象未引用。原因应该是对象是null,在下边的语句中没法操作。
                    {
                        //把CheckBoxList1和Label1联系起来的是 <asp:ListItem>Overline</asp:ListItem>中的 Overline等,即label控件font中的属性名字。
                        //下面这句话的意思是:如果现在的属性在CheckBoxList1是选中的话,则设置相应的label属性;
                        if (CheckBoxList1.Items.FindByValue(lblFontProperty.Name).Selected)
                        {
                            lblFontProperty.SetValue(Label1.Font, true, null);
                        }
                       else
                        {
                            lblFontProperty.SetValue(Label1.Font, false, null);
                        }
                        
                    }
                }
            }
        }
    }  --------------------编程问答-------------------- 楼主挺厚道,把办法共享出来。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,