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