DataFormatString из набора данных, с помощью кода

#asp.net #visual-studio #ms-access

#asp.net #visual-studio #ms-access

Вопрос:

Я выбрал кучу данных из моей базы данных access, одно из полей которой является полем даты и времени.

Я пытаюсь показать его в формате сетки, но когда я пытаюсь:

 dtlJob.DataSource = genericDataSet
dtlJob.Fields(2).DataFormatString = "{0:d}"
dtlJob.DataBind()
  

Я получаю эту ошибку в строке 2

 Error   2   'DataFormatString' is not a member of 'System.Web.UI.WebControls.DataControlField'.
  

Как мне отформатировать мои данные?

Редактировать

Это мой DetailsGridView, который я пытаюсь показать

 <asp:DetailsView ID="dtlJob" runat="server" Height="50px" Width="125px">

</asp:DetailsView>
  

в нем нет ничего, кроме его тегов, поскольку я извлекаю все данные с помощью кода из базы данных. Но я хочу отформатировать поле Data даты, которое больше не отображается так, какие данные оно имеет
введите описание изображения здесь

Комментарии:

1. Не могли бы вы опубликовать свое определение GridView из ASPX-файла?

2. Конечно.. в нем нет ничего, кроме его тегов, поскольку я извлекаю все данные с помощью кода из базы данных

Ответ №1:

Вы должны создать BoundField, подобный приведенному ниже коду.

 <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="false" Height="50px" Width="125px">
<Fields>
    <asp:BoundField DataField="Name" HeaderText="Name" />
    <asp:BoundField DataField="Age"  HeaderText="Age" />
    <asp:BoundField DataField="Birth"  HeaderText="Birth" DataFormatString="{0:d}" />
 </Fields>
 </asp:DetailsView>
  

Я надеюсь, что это помогло.

Висенте

Комментарии:

1. Я сделал это, но поле дублируется

2. Должен ли он форматироваться всякий раз, когда значение поля данных совпадает с именем поля в наборе данных?

Ответ №2:

Свойство fields доступно только для чтения, поэтому вы не можете изменить его, кроме как в конструкторе. Пожалуйста, обратите внимание, что я не тестировал это решение, но это то, что, я думаю, вам нужно сделать.

Итак, вам нужно создать новый класс, который наследует от представления сведений и затеняет свойство Fields, используя его собственное частное поле _fields:

 Imports System.Web.UI.WebControls
Public Class CustomDetailsView
    Inherits DetailsView

    Private _fields As System.Web.UI.WebControls.DataControlFieldCollection
    Public Shadows Property Fields As System.Web.UI.WebControls.DataControlFieldCollection
        Get
            Return _fields
        End Get
        Set(ByVal value As System.Web.UI.WebControls.DataControlFieldCollection)
            _fields = value
        End Set
    End Property
End Class
  

Затем у вас есть следующий код, создающий объект CustomDetailsView, сообщающий ему, что его источником данных является dataset, форматирующий второе поле столбца и предоставляющий всю эту информацию вашему detaisview в веб-форме, прежде чем привязывать данные.

     Dim myDetailsView = New CustomDetailsView
    myDetailsView.DataSource = genericDataSet
    CType(myDetailsView.Fields(1), BoundField).DataFormatString = "{0:d}"
    dtlJob = myDetailsView
    dtlJob.DataBind()
  

Базовый тип BoundField — DataControlField, поэтому вы можете написать строку CType .
Я не могу протестировать это прямо сейчас, пожалуйста, сделайте это и оставьте отзыв. Если это не сработает, это может быть началом ответа.

Приветствую

Ответ №3:

Вот еще одно решение (еще не протестировано). Здесь вы по-прежнему создаете новый класс, наследующий DetailsView, и получаете доступ к переменной fields в конструкторе:

 Imports Microsoft.VisualBasic
Imports System.Collections.Generic

Public Class _CustomDetailsView
    Inherits DetailsView
    Public Sub New(ByVal Columns As List(Of String))

        For Each item As String In Columns
            Dim bfield As New BoundField
            If Not String.IsNullOrWhiteSpace(item) Then
                bfield.DataFormatString = item
            Else
                bfield.DataFormatString = ""
            End If
            Me.Fields.Add(bfield)
        Next
    End Sub
End Class
  

Затем вы создаете список строк, содержащих желаемое форматирование для каждого столбца. Затем вы создаете свой _CustomDetailsView, передавая этот список строк в конструкторе.
Затем вы назначаете своему DtlJob объект _CustomDetailsView, и, наконец, вы предоставляете источник данных и продолжаете привязку данных:

     Dim DataFieldStyles = New List(Of String)
    ' First column: Default style
    ' Second column: Date format
    ' Third : Currency Format
    ' Fourth : Default style
    DataFieldStyles.AddRange(New String() {"", "{0:d}", "{0:c}", ""})

    Dim My_DetailsView As _CustomDetailsView = New _CustomDetailsView(DataFieldStyles)
    dtlJob = My_DetailsView
    dtlJob.DataSource = genericDataSet
    dtlJob.DataBind()
  

То же замечание, что и для моего другого ответа, я не могу это проверить, поэтому попробуйте и, пожалуйста, дайте отзыв.

Приветствую