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

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
量子位
aimingoo的专栏
aimingoo的专栏
V
V2EX
Vercel News
Vercel News
B
Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
S
Secure Thoughts
U
Unit 42
博客园 - 叶小钗
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
W
WeLiveSecurity
博客园 - Franky
Forbes - Security
Forbes - Security
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Schneier on Security
Schneier on Security
I
InfoQ
B
Blog RSS Feed
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Webroot Blog
Webroot Blog
AWS News Blog
AWS News Blog
Last Week in AI
Last Week in AI
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CERT Recently Published Vulnerability Notes
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
L
Lohrmann on Cybersecurity
SecWiki News
SecWiki News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
J
Java Code Geeks

博客园 - 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配置文件: