2013-11-07 6 views
0

Я создал элемент управления, унаследованное от GridView:Переопределенная функция не стреляя

Partial Public Class nullGridView 
    Inherits System.Web.UI.WebControls.GridView 

    Protected Overrides Function CreateAutoGeneratedColumn(ByVal fieldProperties As AutoGeneratedFieldProperties) As AutoGeneratedField 

     ' Create an AutoGeneratedField object. 
     Dim field As New AutoGeneratedField(fieldProperties.DataField) 

     ' Set the properties of the AutoGeneratedField using 
     ' the values from the AutoGeneratedFieldProperties 
     ' object contained in the fieldProperties parameter. 
     CType(field, IStateManager).TrackViewState() 
     field.HeaderText = fieldProperties.Name 
     field.SortExpression = fieldProperties.Name 
     field.ReadOnly = fieldProperties.IsReadOnly 
     field.DataType = fieldProperties.Type 
     field.NullDisplayText = "NULL" 

     Return field 

    End Function 

End Class 

Затем я могу создать экземпляры класса в коде и поместить их в заполнители. Однако функция, которую я пытаюсь переопределить, никогда не срабатывает. Я проверил его подпись как с документацией Microsoft, так и с другими источниками, и, похоже, он идентичен документированной подписи, но никогда не запускается. Любые предложения о том, почему это не работает, или как отлаживать эту проблему?

(Примечание. Я также поместил в класс конструктор и получил имя ОК - это только то, что не вызывается).

+0

Я просто столкнулся с подобной проблемой после установки VS2013 на новый ПК с помощью настраиваемого элемента управления, который мы написали, который работал много лет, и этот метод, похоже, не срабатывает после создания с использованием компилятора 2013 года (даже с таргетингом на .NET 4) , Этот метод теперь помечен как устаревший в .NET 4.5, поэтому неплохо использовать продвижение вперед, но не обнаружил, что (если что-либо) его заменяет. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.createautogeneratedcolumn(v=vs.110).aspx – BateTech

+0

Вы когда-нибудь это выясняли? –

ответ

0

Из документации GridView.AutoGenerateColumns:

Когда свойство AutoGenerateColumns устанавливается истина, объект AutoGeneratedField автоматически создается для каждого поля в источника данных. Каждое поле затем отображается как столбец в элементе управления GridView в порядке появления полей в источнике данных . Эта опция обеспечивает удобный способ отображения каждого поля в источнике данных; однако у вас ограниченный контроль над тем, как отображается или ведет себя автоматически созданное поле столбца .

Вы устанавливаете AutoGenerateColumns на верное место где-нибудь? Вам также необходимо предоставить Grid источник данных. Какой источник данных вы используете?

Если вы настроили все в соответствии со ссылкой выше, вам не нужно переопределять функцию, чтобы получить поведение в коде, потому что оно автоматически создаст эти экземпляры. Далее, посмотрите на the documentation for that function: он устарел - так что мне сложно знать, что он делает сегодня.

Если вы посмотрите на the property's documentation, он дает некоторые варианты того, как вы можете управлять созданием get, например, с помощью ColumnsGenerator.

+0

Спасибо за быстрый ответ. Да, для параметра AutoGenerateColumns установлено значение true, а для источника данных сетки задан запрос Linq. Вот как создания экземпляра GridView: 'Dim г.в. = Новый nullGridView' ' placeholder.Controls.Add (г.в.) '' gv.DataSourceID = "LinqDataSource1" '' gv.AutoGenerateColumns = true' 'gv.DataBind () ' Причина, по которой я переопределяю функцию, так что я могу получить поддержку NULL в произвольной таблице. Есть ли другой способ сделать это? – user2592431

Смежные вопросы