带有附加可绑定字段的ASP.NET Server控件

我创建了一个自定义服务器控件,派生自System.Web.Contols.CheckBoxList来自定义CheckBoxList的呈现方式。 我还想添加另一个可绑定字段,并在CheckBoxList.RenderItem()方法中获取该字段的值。 我想要创建的字段应包含一个值,指定是否选中CheckBoxListItem 。 我已经阅读了一些关于自定义DataFields的文章,但它从未得到详细解释。

我已经把我课程的一部分包括在内,以便更好地解释我似乎无法理解的内容。

 public class ListedCheckBoxList : CheckBoxList { protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { if (itemType != ListItemType.Item) return; var item = base.Items[repeatIndex]; string cbxHtml = string.Format(" {2}", item.Value, string.Concat(this.ClientID, repeatIndex), item.IsChecked, // <-- My custom bindable field item.Text); writer.Write(cbxHtml); } } 

在.aspx页面中使用此控件时,我试图像这样绑定它

  

这是我大约一年前写的版本。 我希望能够绑定已检查的状态以及各个项目的工具提示。 希望能帮助到你…

 public class CheckBoxList_Extended : CheckBoxList { ///  /// Gets or sets the name of the data property to bind to the tooltip attribute of the individual CheckBox. ///  [DefaultValue("")] public string DataTooltipField { get { string value = base.ViewState["DataTooltipField"] as string; if (value == null) value = ""; return value; } set { if (value == null || value.Trim() == "") { base.ViewState.Remove("DataTooltipField"); } else { base.ViewState["DataTooltipField"] = value.Trim(); } } } ///  /// Gets or sets the name of the data property to bind to the Checked property of the individual CheckBox. ///  [DefaultValue("")] public string DataCheckedField { get { string value = base.ViewState["DataCheckedField"] as string; if (value == null) value = ""; return value; } set { if (value == null || value.Trim() == "") { base.ViewState.Remove("DataCheckedField"); } else { base.ViewState["DataCheckedField"] = value.Trim(); } } } protected override void PerformDataBinding(System.Collections.IEnumerable dataSource) { if (dataSource != null) { string dataSelectedField = this.DataCheckedField; string dataTextField = this.DataTextField; string dataTooltipField = this.DataTooltipField; string dataValueField = this.DataValueField; string dataTextFormatString = this.DataTextFormatString; bool dataBindingFieldsSupplied = (dataTextField.Length != 0) || (dataValueField.Length != 0); bool hasTextFormatString = dataTextFormatString.Length != 0; bool hasTooltipField = dataTooltipField.Length != 0; bool hasSelectedField = dataSelectedField.Length != 0; if (!this.AppendDataBoundItems) this.Items.Clear(); if (dataSource is ICollection) this.Items.Capacity = (dataSource as ICollection).Count + this.Items.Count; foreach (object dataItem in dataSource) { ListItem item = new ListItem(); if (dataBindingFieldsSupplied) { if (dataTextField.Length > 0) { item.Text = DataBinder.GetPropertyValue(dataItem, dataTextField, null); } if (dataValueField.Length > 0) { item.Value = DataBinder.GetPropertyValue(dataItem, dataValueField, null); } } else { if (hasTextFormatString) { item.Text = string.Format(CultureInfo.CurrentCulture, dataTextFormatString, new object[] { dataItem }); } else { item.Text = dataItem.ToString(); } item.Value = dataItem.ToString(); } if (hasSelectedField) { item.Selected = (bool)DataBinder.GetPropertyValue(dataItem, dataSelectedField); } if (hasTooltipField) { string tooltip = DataBinder.GetPropertyValue(dataItem, dataTooltipField, null); if (tooltip != null && tooltip.Trim() != "") { item.Attributes["title"] = tooltip; } } this.Items.Add(item); } } base.PerformDataBinding(null); } } 

Checkbox已经有了一个属性,“Checked”

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.checked.aspx

您可以相当轻松地添加自定义,只需添加新的公共属性即可。 然后,您可以以编程方式或在aspx代码中设置它。

 public class ListedCheckBoxList : CheckBoxList { public string CustomTag { get; set; } //...snip }