Vorrei creare un controllo che estenda il BoundField utilizzato all'interno di GridView. Quello che mi piacerebbe fare è fornire un'altra proprietà denominata HighlightField che sarà simile alla proprietà DataField in cui voglio assegnargli il nome di una colonna di dati. Dato che la colonna di dati vedrebbe se il valore è vero o falso e evidenzia il testo dato all'interno della colonna data sulla riga data.Estensione di un (BoundField) (ASP.NET)
Alcuni pseudo-codice se questo non ha senso:
<asp:GridView id="grid">
<Columns>
<asp:BoundField DataField="Name" />
<cc:HighlightField DataField="Name" HighlightField="IsHighlighted" />
</Columns>
</asp:GridView>
E poi all'interno della databind o qualcosa del genere:
if(this row's IsHighlighted value is true)
set the CssClass of this datacell = "highlighted"
(or wrap a span tag around the text)
Ravish mi ha segnalato nella direzione corretta, ecco quello che ho finito con:
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";
}
}
}
Mi piace, gli darò un vortice e torno – rball
Non c'è modo di fare un collegamento dati bidirezionale? Potresti creare una proprietà booleana sul tuo HighlightBoundField chiamata "IsHighlighted" e fare qualcosa del genere: –
Chris