gpt4 book ai didi

asp.net - 扩展 (ASP.NET) BoundField

转载 作者:行者123 更新时间:2023-12-02 18:27:47 27 4
gpt4 key购买 nike

我想创建一个扩展 GridView 中使用的 BoundField 的控件。我想要做的是提供另一个名为 HighlightField 的属性,该属性与 DataField 属性类似,我想将其命名为数据列。给定该数据列,它将查看该值是 true 还是 false,并突出显示给定行的给定列中的给定文本。

一些伪代码,如果这没有意义:

<asp:GridView id="grid">
<Columns>
<asp:BoundField DataField="Name" />
<cc:HighlightField DataField="Name" HighlightField="IsHighlighted" />
</Columns>
</asp:GridView>

然后在数据绑定(bind)或其他内容中:

if(this row's IsHighlighted value is true)
set the CssClass of this datacell = "highlighted"
(or wrap a span tag around the text)

Ravish 为我指明了正确的方向,这就是我的最终结果:

public class HighlightedBoundField : BoundField
{
public string HighlightField
{
get { return ViewState["HighlightField"].ToString(); }
set
{
ViewState["HighlightField"] = value;
OnFieldChanged();
}
}

public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);

bool isDataRowAndIsHighlightFieldSpecified = cellType == DataControlCellType.DataCell && !string.IsNullOrEmpty(HighlightField);
if (isDataRowAndIsHighlightFieldSpecified)
{
cell.DataBinding += new EventHandler(cell_DataBinding);
}
}

void cell_DataBinding(object sender, EventArgs e)
{
TableCell cell = (TableCell)sender;
object dataItem = DataBinder.GetDataItem(cell.NamingContainer);
cell.Text = DataBinder.GetPropertyValue(dataItem, DataField).ToString();

bool highlightThisCellsText = Convert.ToBoolean(DataBinder.GetPropertyValue(dataItem, HighlightField));
if (highlightThisCellsText)
{
cell.CssClass += " highlight";
}
}
}

最佳答案

未经测试:

public class HighlightBoundField : DataControlField {

//property to indicate if this field should be highlighted, given the value of this property
//
public string HighlightField {
get {
object value = ViewState["HighlightField"];

if (value != null) {
return Convert.ToString(value);
}

return "";
}

set {
ViewState["HighlightField"] = value;
OnFieldChanged();
}
}

//property to display as text in the cell
//
public string DataField {
get {
object value = ViewState["DataField"];

if (value != null) {
return value.ToString();
}

return string.Empty;
}

set {
ViewState["DataField"] = value;

OnFieldChanged();
}
}

//bound field creation
//
protected override DataControlField CreateField() {
return new BoundField();
}

//override the method that is used to populate and format a cell
//
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) {
base.InitializeCell(cell, cellType, rowState, rowIndex);

//if this celltype is a data row
//
if (cellType == DataControlCellType.DataCell && !string.IsNullOrEmpty(HighlightField)) {
//create label control to display text
//
var lblText = new Label();

//add event listener for when the label is bound
//
lblText.DataBinding += new EventHandler(lblText_DataBinding);

//add label to controls collection
//
cell.Controls.Add(lblText);
}
}

void lblText_DataBinding(object sender, EventArgs e) {
//retrieve data item and set label text
//
Label lblText = (Label) sender;
object dataItem = DataBinder.GetDataItem(lblText.NamingContainer);
lblText.Text = DataBinder.GetPropertyValue(dataItem, DataField).ToString();

//check if value should be highlighted
//
if (Convert.ToBoolean(DataBinder.GetPropertyValue(dataItem, HighlightField))) {
lblText.Style.Add("background-color", "yellow");
}
}
}

关于asp.net - 扩展 (ASP.NET) BoundField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1379871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com