#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()
То же замечание, что и для моего другого ответа, я не могу это проверить, поэтому попробуйте и, пожалуйста, дайте отзыв.
Приветствую