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

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
W
WeLiveSecurity
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
A
Arctic Wolf
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
G
GRAHAM CLULEY
O
OpenAI News
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
Vercel News
Vercel News
宝玉的分享
宝玉的分享
Attack and Defense Labs
Attack and Defense Labs
T
The Blog of Author Tim Ferriss
量子位
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
博客园_首页
F
Full Disclosure
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
U
Unit 42
A
About on SuperTechFans
博客园 - 司徒正美
Hacker News - Newest:
Hacker News - Newest: "LLM"
人人都是产品经理
人人都是产品经理
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Scott Helme
Scott Helme
TaoSecurity Blog
TaoSecurity Blog

博客园 - karoc

《重构-改善既有代码的设计》读书笔记 任务开始时间和完成时间 最大长度验证控件:MaxLengthValidator 又是关于AjaxControlToolkit的ModalPopup的问题 有个总结 使用svn的小插曲 开发小经验总结(不断更新) 今天发现一个VS2008中文版和英文版的差别 解决DocType引起AjaxTookit的ModulPopup显示异常问题的方法 Reporting Services 2005 常见问题解决方法(不断更新) 用VSTO开发Project插件心得 自定义MemberShipProvider和PersonalizationProvider使用WebParts实现个性化页面 在线修改KeyValue配置节 瞎搞八搞,另类PageBase 改造Duwamish中的Configuration 直接用Response输出可以加批注的Excel C#控制Windows Messenger和Windows Live Messenger窗口发送消息 一个读取扩展名为xml的资源文件的方法 用C#+WMI实现获取w3wp进程对应的应用程序池
扩展GridView,增加单选按钮列
karoc · 2010-02-25 · via 博客园 - karoc

刚写的热乎乎的代码:

代码

/// <summary>
    
/// 单选按钮列
    
/// </summary>
    
/// <remarks>
    
/// 如果没有设置GroupName,则使用GridView的ID作为GroupName
    
/// 如果没有设置DataField,则使用RowIndex作为Value
    
/// 允许设置DataFormatString格式化数据
    
/// </remarks>
    [AspNetHostingPermission(SecurityAction.Demand,
      Level 
= AspNetHostingPermissionLevel.Minimal)]
    
public class RadioButtonSelectField : DataControlField
    {
        
/// <summary>
        
/// 单选按钮组名,默认去GridView的ClientID
        
/// </summary>
        [Description("单选按钮组名,默认去GridView的ClientID")]
        
public string RadioButtonGroupName
        {
            
get
            {
                
return this.ViewState["RadioButtonGroupName"as string;
            }
            
set
            {
                
this.ViewState["RadioButtonGroupName"= value;
            }
        }
/// <summary>
        
/// 单选按钮的样式
        
/// </summary>
        [Description("单选按钮的样式")]
        
public string RadioButtonCssClass
        {
            
get
            {
                
return this.ViewState["RadioButtonCssClass"as string;
            }
            
set
            {
                
this.ViewState["RadioButtonCssClass"= value;
            }
        }
/// <summary>
        
/// 要绑定的数据表达式
        
/// </summary>
        [Description("要绑定的数据表达式")]
        
public string DataField
        {
            
get
            {
                
return this.ViewState["DataField"as string;
            }
            
set
            {
                
this.ViewState["DataField"= value;
            }
        }
/// <summary>
        
/// 要绑定的数据表达式格式
        
/// </summary>
        [Description("要绑定的数据表达式格式")]
        
public string DataFormatString
        {
            
get
            {
                
return this.ViewState["DataFormatString"as string;
            }
            
set
            {
                
this.ViewState["DataFormatString"= value;
            }
        }
/// <summary>
        
/// return self;
        
/// </summary>
        
/// <returns></returns>
        protected override DataControlField CreateField()
        {
            
return this;
        }
/// <summary>
        
/// 添加控件
        
/// </summary>
        
/// <param name="cell"></param>
        
/// <param name="cellType"></param>
        
/// <param name="rowState"></param>
        
/// <param name="rowIndex"></param>
        public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
        {
            
base.InitializeCell(cell, cellType, rowState, rowIndex);if (cellType == DataControlCellType.DataCell)
            {
                var literal 
= new Literal();if (string.IsNullOrEmpty(this.DataField))
                {
                    SetLiteralHtml(literal, rowIndex.ToString());
                }
                
else
                {
                    literal.DataBinding 
+= new EventHandler(literal_DataBinding);
                }
                
                cell.Controls.Add(literal);
            }
        }
void literal_DataBinding(object sender, EventArgs e)
        {
            
if (string.IsNullOrEmpty(this.DataField))
            {
                
return;
            }

            var literal 

= sender as Literal;
            
if (literal == null)
            {
                
return;
            }
            var cell 
= literal.Parent as TableCell;
            
if (cell == null)
            {
                
return;
            }
            var container 
= literal.NamingContainer;
            
if (container == null)
            {
                
return;
            }
            
bool foundDataItem;
            var dataItem 
= DataBinder.GetDataItem(container, out foundDataItem);
            
if (!foundDataItem)
            {
                
return;
            }

            var dataValue 

= null as string;
            
if (this.DataField.Contains('.'))
            {
                dataValue 
= DataBinder.Eval(dataItem, this.DataField, this.DataFormatString);
            }
            
else
            {
                dataValue 
= DataBinder.GetPropertyValue(dataItem, this.DataField, this.DataFormatString);
            }

            SetLiteralHtml(literal, dataValue);
        }

private void SetLiteralHtml(Literal literal, string dataValue)
        {
            var groupName 
= this.RadioButtonGroupName;
            
if (string.IsNullOrEmpty(groupName))
            {
                groupName 
= literal.Parent.Parent.Parent.Parent.ID;
            }
            var cssClass 
= this.RadioButtonCssClass;
            
if (!string.IsNullOrEmpty(cssClass))
            {
                cssClass 
= string.Format("class=\"{0}\""this.RadioButtonCssClass);
            }

            var selected 

= false;
            var selectedValue 
= literal.Page.Request[groupName];
            
if (string.IsNullOrEmpty(selectedValue) == false)
            {
                
if (string.Compare(selectedValue, dataValue, true== 0)
                {
                    selected 
= true;
                }
            }

            var rbHtml 

= string.Format("<input type=\"radio\" name=\"{0}\" value=\"{1}\" {2} {3} />",
                groupName,
                dataValue,
                cssClass,
                selected 
? "checked" : string.Empty);

            literal.Text 

= rbHtml;
        }
    }