Erstellen Sie ein benutzerdefiniertes EditorPart in SharePoint
-
06-07-2019 - |
Frage
Ich habe den folgenden Artikel als Leitfaden zu erstellen, ein benutzerdefiniertes EditorPart in SharePoint
Allerdings, wenn ich diese Technik implementieren ich kann nicht speichern Sie die änderungen, um meine benutzerdefinierten Eigenschaften.Grundsätzlich ist die CreateChildControls-Funktion wird aufgerufen, wenn die "Anwenden" oder "Speichern" buttons werden benutzt, und dies erzeugt eine neue Instanz des internen Kontroll-variable, damit abwischen alle änderungen, die der Benutzer vorgenommen hat.
Also, wenn die ApplyChanges-Funktion aufgerufen wird, werden alle Steuerelemente werden auf die Standardeinstellungen zurückgesetzt.
Hat jemand einen Tipp dazu?
Vielen Dank
UPDATE
Ich bin einfach nicht in der Lage, wickeln Sie meinen Kopf herum, überhaupt.Allerdings sehe ich das ich stecken an der gleichen Stelle, wie kann ich etwas sparen, zurück zu meinem Webpart in ApplyChanges (), wenn CreateChildCOntrols() wird immer zuerst ausgeführt werden und ersetzen so meine CheckBoxList mit einer neuen Instanz und daher nicht ausgewählten Elemente.Ich habe den vollständigen code unten, in der Hoffnung, dass ich als absolute dunce und die Lösung liegt auf der Hand.
Private Class CaseMatterInfoEditorPart
Inherits EditorPart
Protected WithEvents _propList As CheckBoxList
Protected Overrides Sub CreateChildControls()
_propList = New CheckBoxList
_propList.EnableViewState = True
_propList.AutoPostBack = True
_propList.Width = New Unit("100%")
LoadProperties()
Me.Controls.Add(New LiteralControl("Please select the data items you wish to include:<br />"))
Me.Controls.Add(_propList)
End Sub
Public Overrides Function ApplyChanges() As Boolean
Dim part As CaseMatterInfoPart = CType(WebPartToEdit, _
CaseMatterInfoPart)
If part IsNot Nothing Then
GetSelectedDataValues()
Else
Return False
End If
Return True
End Function
Public Overrides Sub SyncChanges()
EnsureChildControls()
Dim part As CaseMatterInfoPart = CType(WebPartToEdit, _
CaseMatterInfoPart)
If part IsNot Nothing Then
If Not String.IsNullOrEmpty(part.DataValues) Then
SetSelectedValues(part.DataValues)
End If
End If
End Sub
Private Function GetSelectedDataValues() As String
Dim strReturn As String = ""
For Each item As ListItem In _propList.Items
If item.Selected Then
strReturn &= item.Text & "|"
End If
Next
If Not String.IsNullOrEmpty(strReturn) Then
strReturn = strReturn.Remove(strReturn.Length - 1, 1)
End If
Return strReturn
End Function
Private Sub SetSelectedValues(ByVal Values As String)
If Not String.IsNullOrEmpty(Values) And _
_propList IsNot Nothing Then
_propList.ClearSelection()
Dim split() As String = Values.Split("|")
For Each strValue As String In split
For Each item As ListItem In _propList.Items
If item.Text = strValue Then
item.Selected = True
End If
Next
Next
End If
End Sub
Private Sub LoadProperties()
Dim file As New File
Dim lstProperties As List(Of String) = GetStringPropertyNames(file.GetType)
For Each strProperty As String In lstProperties
_propList.Items.Add(strProperty)
Next
End Sub
Private Function GetStringPropertyNames(ByVal Type As System.Type) As List(Of String)
Dim props() As PropertyInfo = Type.GetProperties
Dim propList As New List(Of String)
For Each prop As PropertyInfo In props
If prop.Name <> "Chronology" And _
prop.Name <> "Documents" And _
prop.Name <> "Milestones" And _
prop.Name <> "DiaryEntries" And _
prop.Name <> "FileLoadSuccesful" And _
prop.Name <> "FileLoadError" Then
Dim boo As Boolean = False
Dim bootype As Type = boo.GetType
Dim dec As Decimal
Dim decType As Type = dec.GetType
If prop.PropertyType Is "".GetType Or _
prop.PropertyType Is Now.GetType Or _
prop.PropertyType Is bootype Or _
prop.PropertyType Is decType Then
propList.Add(prop.Name)
Else
Dim listChildPropertyStrings As List(Of String) = GetStringPropertyNames(prop.PropertyType)
For Each strProp As String In listChildPropertyStrings
propList.Add(prop.Name & ": " & strProp)
Next
End If
End If
Next
Return propList
End Function
End Class
Hoffe, jemand da draußen sehen kann, was ich nicht kann.
Vielen Dank
Lösung 3
Es würde helfen, wenn ich hatte tatsächlich gespeichert die Zeichenfolge zurückgegeben, die von GetSelectedDataValues() in eine Immobilie auf der web-Teil...
Code sollte wie folgt Aussehen:
Public Overrides Function ApplyChanges() As Boolean
Dim part As CaseMatterInfoPart = CType(WebPartToEdit, CaseMatterInfoPart)
If part IsNot Nothing Then
part.DataValues = GetSelectedDataValues()
Else
Return False
End If
Return True
End Function
Es so oft bezahlt, um zu überprüfen, überprüfen und dreifach überprüfen, was Sie tun.Ich hatte serioulsy kompliziert dieses Problem auf der Suche für eine Antwort, starrte mir ins Gesicht.
Andere Tipps
ich meine Editor in der Regel mit dem Code in diesem Artikel starten: http://msdn.microsoft. com / en-us / library / system.web.ui.webcontrols.webparts.editorpart.aspx nie hatte keine solche Probleme.
Klingt wie Sie ein Problem mit dem Steuerfluss in ASP.NET, aber ohne Code ist es schwer zu sehen, was es ist.
Die ApplyChanges () -Methode verwendet wird, um den Inhalt des benutzerdefinierten Editor zu nehmen und sie auf die webpart gelten, während die SyncChanges () -Methode macht das Gegenteil, es nimmt die zuvor gespeicherten Objekte im webpart und aktualisiert den Editor entsprechend. Es ist Ihre Verantwortung, die Logik für sie beide zu schreiben, wenn Sie eine benutzerdefinierte Editor zu erstellen.