5
GridView内で使用されているBoundFieldを拡張するコントロールを作成したいと考えています。私がしたいのは、DataFieldプロパティに似ているHighlightFieldという名前の別のプロパティを用意して、データカラムに名前を付けることです。そのデータ列を見ると、値がtrueまたはfalseであるかどうかが確認され、指定された行の指定された列内のテキストが強調表示されます。(ASP.NET)BoundFieldを拡張する
いくつかの擬似コードそれは意味をなさない場合:
データバインドか何かの中<asp:GridView id="grid">
<Columns>
<asp:BoundField DataField="Name" />
<cc:HighlightField DataField="Name" HighlightField="IsHighlighted" />
</Columns>
</asp:GridView>
そして:うっとりさせるには、正しい方向に私を指摘
if(this row's IsHighlighted value is true)
set the CssClass of this datacell = "highlighted"
(or wrap a span tag around the text)
、ここで私が終わったものです
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";
}
}
}
私はそれが好きです。私はそれを渦巻きにして戻します。 – rball
双方向データバインディングを行う方法はありませんか? このようにして、 "IsHighlighted"という名前のブール値プロパティを作成し、 –
Chris