Пользовательский класс DataControlField - PullRequest
2 голосов
/ 09 декабря 2010

Я провел некоторый поиск, но в моем случае ничего не помогло.

Я хочу унаследовать DataControlField (System.Web.UI.WebControls), чтобы иметь возможность переносить два элемента управления метками, а затем я хочураскрасьте две метки, чтобы получить какое-то условное форматирование, у меня есть часть условного форматирования, но как я могу настроить этот класс?

Где в моем классе я должен определить два элемента управления метками?Как мне переопределить метод CreateField?

PS: я знаю, что могу сделать это в разметке XHTML, но у меня так много столбцов, что было бы нецелесообразно включать эти разметки в разметку страницы.Поэтому я делаю это на странице CodeBehind.

РЕДАКТИРОВАТЬ :

public class MyField : DataControlField
{
    public MyField()
    {

    }

    protected override DataControlField CreateField()
    {
        // What to put here?
    }

    protected override void CopyProperties(DataControlField newField)
    {
        ((CalendarField)newField).DataField = this.DataField;
        ((CalendarField)newField).DataFormatString = this.DataFormatString;
        ((CalendarField)newField).ReadOnly = this.ReadOnly;

        base.CopyProperties(newField);
    }

    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
    {
        // Call the base method
        base.InitializeCell(cell, cellType, rowState, rowIndex);

        // Initialize the contents of the cell quitting if it is a header/footer
        if (cellType == DataControlCellType.DataCell)
            InitializeDataCell(cell, rowState);
    }

    protected virtual void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
    {

    }
}

1 Ответ

1 голос
/ 09 декабря 2010

Смотри здесь. Надеюсь, это поможет вам.

public class MyField : DataControlField {    
    public MyField()     {      }      
    protected override DataControlField CreateField()     {         
        // What to put here?     

        return new MyField();
    }      
    protected override void CopyProperties(DataControlField newField)     {        
        ((CalendarField)newField).DataField = this.DataField;         
        ((CalendarField)newField).DataFormatString = this.DataFormatString;         
        ((CalendarField)newField).ReadOnly = this.ReadOnly;          
        base.CopyProperties(newField);     
    }      

    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)    
    {         
        // Call the base method         
        base.InitializeCell(cell, cellType, rowState, rowIndex);          
        // Initialize the contents of the cell quitting if it is a header/footer         
        if (cellType == DataControlCellType.DataCell)
        {
            cell.DataBinding += new EventHandler(cell_DataBinding);
        }
    }

    void cell_DataBinding(object sender, EventArgs e)
    {
        Control ctrl = sender as Control;
        var container = ctrl.NamingContainer as IDataItemContainer;

        // here what you would like to show in MyField
    }      

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...