惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - HelloSnoopy

一个最基本的WebService+Flash调用的实例 [转载]如何奔向程序员打工的出头之日? 一定要讲给孩子们的20个小故事 人脉对职业生涯最重要 (转) 爱情的10种样子,送给懂爱的朋友们 装了Enterprise Library.NET 200501release C#判断是否为数字的最好速度! 开源的 BugTracker.net 错误跟踪管理系统 Enjoy new year of 2005! Flash AS2 用EventDispatcher广播事件 设计模式随笔-让众口不再难调 CodeSmith使用心得 [专题]MVC构架模式 使用Microsoft Application Block之Cache Application 用一条SQL完成数据表的行统计 如何使IFrame的长宽与内容自动适应大小 为Project提供一个统一风格的DataGrid 用于读取树形任一节点下所有级别子节点的SqlServer UDF asp.net forums中定时器的应用
写了个用一个文件定义样式的DataGrid
HelloSnoopy · 2005-03-09 · via 博客园 - HelloSnoopy

支持样式类型为字符串或整型的设置,颜色设置暂不支持,不过这可以通过设置一个cssClass解决。
使用时只要设置下设置ConfigFile文件路径即可。
第一次写自定义控件,有些还需改进。
enhancedatagrid.cs

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

namespace YOYOSOFT.Framework.Web.UI.Controls
{
    
/// <summary>
    
/// EnhanceDataGrid 的摘要说明。
    
/// </summary>

    [ToolboxData("<{0}:EnhanceDataGrid runat=server></{0}:EnhanceDataGrid>")]
    
public class EnhanceDataGrid : System.Web.UI.WebControls.DataGrid
    
{
        [Bindable(
true),
            Category(
"Appearance"),
            DefaultValue(
"")]
        
public string ConfigFile
        
{
            
get{return _configFile.Trim();}
            
set{_configFile = value;}
        }
string _configFile = string.Empty;

        
protected override void OnPreRender(EventArgs e)
        
{
            
if(this.ConfigFile.Length != 0)
            
{
                
string filePath = System.Web.HttpContext.Current.Server.MapPath(this.ConfigFile);
                NameValueCollection values 
= Globals.GetNameValues(filePath);
                SetStyle(values);
            }
    
            
base.OnPreRender (e);
        }


        
private void SetStyle(NameValueCollection values)
        
{
            
if(values == nullreturn;

            
string typeName;
            Type t 
= base.GetType();
            
string[] types;
            
for(int i=0; i<values.Count; i++)
            
{
                typeName 
= values.Keys[i];
                types 
= typeName.Split('.');
                PropertyInfo parentInfo 
= t.GetProperty(types[0]);
                
if(parentInfo == nullcontinue
                
                
if(types.Length >= 2)
                
{
                    PropertyInfo childInfo 
= parentInfo.PropertyType.GetProperty(types[1]);
                    SetPropertyValue(childInfo,
                        parentInfo.GetValue(
this,null),values[i]);
                }

                
else
                
{
                    SetPropertyValue(parentInfo,
this,values[i]);
                }

            }

        }

        
/// <summary>
        
/// 设置属性值
        
/// </summary>
        
/// <param name="p">要赋值的属性</param>
        
/// <param name="obj">属性所在对象</param>
        
/// <param name="val">属性值</param>

        private void SetPropertyValue(PropertyInfo p,object obj,string val)
        
{
            
if(p != null && 
                (p.PropertyType 
== typeof(int|| 
                p.PropertyType 
== typeof(string)))
            
{
                
if(Globals.IsInt(val))
                    p.SetValue(obj,
int.Parse(val),null);
                
else
                    p.SetValue(obj,val,
null);
            }

        }

    }

}

globals.cs:

XML配置文件: