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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
S
Securelist
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
Attack and Defense Labs
Attack and Defense Labs
Vercel News
Vercel News
腾讯CDC
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
量子位
S
Schneier on Security
Hacker News: Ask HN
Hacker News: Ask HN
Cyberwarzone
Cyberwarzone
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
T
Tenable Blog
PCI Perspectives
PCI Perspectives
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
W
WeLiveSecurity
N
News | PayPal Newsroom
P
Proofpoint News Feed
O
OpenAI News
C
CERT Recently Published Vulnerability Notes
B
Blog
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy

博客园 - 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;
        }
    }