asp.net 扩展GridView 增加单选按钮列的代码

 更新时间:2010年02月25日 16:56:27   作者:  
asp.net 扩展GridView 增加单选按钮列的代码
复制代码 代码如下:

/// <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;
}
}

相关文章

  • 基于ABP框架实现数据字典开发

    基于ABP框架实现数据字典开发

    本文详细讲解了基于ABP框架实现数据字典开发,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • asp.net Repeater 自增

    asp.net Repeater 自增

    asp.net Repeater 自增加实现代码。
    2009-06-06
  • ASP.NET表单验证方法详解

    ASP.NET表单验证方法详解

    在表单提交的时候,经常需要对录入信息的长度、格式、内容等进行验证,以便获得合理的信息。在ASP.NET开发中主要的验证方法,我总结了一下,主要有一下几种,如有不足之处请朋友们予以指出。
    2008-09-09
  • Web Services使用多态的方法

    Web Services使用多态的方法

    Web Services可以支持多态,不过仅仅限制在可以直接引用Web Services的时候,本文也只是起到抛砖引玉的效果,
    2015-10-10
  • web用户控件调用.aspx页面里的方法

    web用户控件调用.aspx页面里的方法

    今天在一QQ技术群有朋友问: 他在web用户控件中(.ascx)中放了一个dropdownlist控件,一个textbox控件和一个button控件。
    2009-04-04
  • asp.net GridView 中增加记录的方法

    asp.net GridView 中增加记录的方法

    在 ASP.NET 2.0 中,GridView 支持修改/删除记录,但却不支持新增记录的功能(个人感觉是 GridVew 的一大缺憾,估计在下一版本中会加入此功能)
    2009-03-03
  • EF使用Code First模式生成单数形式表名

    EF使用Code First模式生成单数形式表名

    这篇文章介绍了EF使用Code First模式生成单数形式表名的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ASP.NET 多次提交的解决办法

    ASP.NET 多次提交的解决办法

    只要把这2个方法放到页面最下面(就是调用scriptmanager的RegisterStartupScript方法)
    2008-12-12
  • asp.net页面防止重复提交示例分享

    asp.net页面防止重复提交示例分享

    asp.net页面button按钮防止重复提交的方法,大家参考使用吧
    2013-12-12
  • ASP.NET网站使用Kindeditor富文本编辑器配置步骤

    ASP.NET网站使用Kindeditor富文本编辑器配置步骤

    首先下载编辑器然后部署编辑器最后在网页中加入(ValidateRequest="false")引入脚本文件,具体配置步骤如下,有需求的朋友可以了解下哈
    2013-06-06

最新评论