Je veux changer la valeur du texte dans un ButtonField en fonction d'autres facteurs. Certains code:Comment changer la valeur d'un ButtonField étendu?
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(UnnpiFlagField);
if (isDataRowAndIsHighlightFieldSpecified)
{
cell.DataBinding += new EventHandler(cell_DataBinding);
}
}
private void cell_DataBinding(object sender, EventArgs e)
{
TableCell cell = (TableCell)sender;
object dataItem = DataBinder.GetDataItem(cell.NamingContainer);
IButtonControl button = cell.Controls[0] as IButtonControl;
button.Text = DataBinder.GetPropertyValue(dataItem, DataTextField).ToString();
bool highlightTheText = DataBinder.GetPropertyValue(dataItem, IsFlagField).ToString().ToUpper() == "Y";
if (highlightTheText)
{
cell.CssClass = string.Concat(ItemStyle.CssClass, " thisChangesFine");
button.Text = "CHANGE ME";
}
}
Ce code fonctionne très bien pour BoundField, dans lequel le texte de la cellule est modifiée et a mis en évidence, mais même si le bouton de contrôle a en effet un bouton avec le CommandName est-elle correcte via la page ASPX, la valeur du texte initialement ne contient rien et semble être placé ailleurs. Quand je l'ai mis ici à une autre valeur, il semble que la valeur initiale soit remise à un autre endroit. En regardant dans Reflector, je ne vois pas où cela pourrait se produire. Réflecteur:
protected override DataControlField CreateField()
public override bool Initialize(bool sortingEnabled, Control control)
private void OnDataBindField(object sender, EventArgs e) [Can't get that one :(]
protected override void CopyProperties(DataControlField newField)
protected virtual string FormatDataTextValue(object dataTextValue)
public override void ValidateSupportsCallback()
J'ai vérifié chacun d'eux et je ne vois pas la valeur définie. Cela ne semble se produire dans le OnDataBindField (objet, EventArgs) ici:
if ((this.textFieldDesc == null) && (component != null))
{
...
this.textFieldDesc = TypeDescriptor.GetProperties(component).Find(dataTextField, true);
...
}
if ((this.textFieldDesc != null) && (component != null))
{
object dataTextValue = this.textFieldDesc.GetValue(component);
str = this.FormatDataTextValue(dataTextValue);
}
...
((IButtonControl) control).Text = str;
Ce que je pense se passerait-il avant que je suis en train de changer la valeur, mais comme je l'ai déjà dit, il semble que button.Text est string.Empty dans la méthode cell_DataBinding.
Vous avez des idées?