Ich möchte ein Steuerelement erstellen, das das BoundField erweitert, das in einem GridView verwandt wird. Ich möchte eine andere Eigenschaft namens HighlightField bereitstellen, die der DataField-Eigenschaft ähnlich ist, da ich ihr den Namen einer Datenspalte geben möchte. Angesichts dieser Datenspalte würde es sehen, ob der Wert wahr oder falsch ist und den gegebenen Text innerhalb der gegebenen Spalte in der gegebenen Zeile hervorheben.Erweitern eines (ASP.NET) BoundField
Einige psuedo-Code, wenn das keinen Sinn macht:
<asp:GridView id="grid">
<Columns>
<asp:BoundField DataField="Name" />
<cc:HighlightField DataField="Name" HighlightField="IsHighlighted" />
</Columns>
</asp:GridView>
Und dann im databind oder etwas:
if(this row's IsHighlighted value is true)
set the CssClass of this datacell = "highlighted"
(or wrap a span tag around the text)
Ravish wies mich in die richtige Richtung, hier ist was ich am Ende up mit:
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";
}
}
}
Ich mag es, ich werde es einen Wirbel geben und zurück – rball
Gibt es keine Möglichkeit, Zwei-Wege-Datenbindung zu tun? Können Sie eine boolesche Eigenschaft in Ihrem HighlightBoundField mit dem Namen "IsHighlight" erstellen und so etwas tun: –
Chris