Tôi muốn tạo một điều khiển mở rộng BoundField được sử dụng trong GridView. Những gì tôi muốn làm là cung cấp một thuộc tính khác có tên là HighlightField sẽ tương tự như thuộc tính DataField trong đó tôi muốn đặt cho nó tên cột dữ liệu. Cho rằng cột dữ liệu nó sẽ thấy nếu giá trị là đúng hay sai và làm nổi bật văn bản đã cho trong cột đã cho trên hàng đã cho.Mở rộng một (ASP.NET) BoundField
Một số psuedo-mã nếu điều đó không có ý nghĩa:
<asp:GridView id="grid">
<Columns>
<asp:BoundField DataField="Name" />
<cc:HighlightField DataField="Name" HighlightField="IsHighlighted" />
</Columns>
</asp:GridView>
Và rồi trong DataBind hoặc một cái gì đó:
if(this row's IsHighlighted value is true)
set the CssClass of this datacell = "highlighted"
(or wrap a span tag around the text)
cướp chỉ cho tôi trong đúng hướng, đây là những gì tôi đã kết thúc lên với:
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";
}
}
}
Tôi thích nó, tôi sẽ cho nó một vòng xoáy và quay lại – rball
Không có cách nào để thực hiện dữ liệu hai chiều? Bạn có thể tạo một thuộc tính boolean trên HighlightBoundField của bạn được gọi là "IsHighlighted" và làm một cái gì đó như thế này: –
Chris