SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Listboxen in einem Webpart mit Inhalt aus Listen füllen

Geprüfte Antwort Dieser Beitrag hat 5 Antworten

Ohne Rang
30 Beiträge
DavidSch. erstellt 21 Juli 2010 16:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen, ich möchte gerne folgendes des Problem lösen:

Ich habe ein Webpart, indem ich z.B. 3 Listboxen und 2 Buttons ("Suchen" und "Alle anzeigen") habe.
Aus den Listboxen kann ich Werte auswählen die dann beim klicken auf "Suchen" in die Url übertragen werden. Das Übertragen der Daten an die Url dient zwecks Filterung von Daten in einem andern Webpart. Die Funktion mit dem Filtern funktioniert so auch einwandfrei. Mein Problem stellt sich nun wie folgt dar:

Nachdem ich die Listboxen programmiert habe, würde ich gerne die Inhalte der Listboxen aus Listen "ziehen". Derzeit tippe ich die Werte direkt in den Quellcode rein... das ist aber nicht besonder effizient, denn sobald ich einen Wert in die Liste einfüge / ändert ..., muss ich im Quellcode auch den Wert einfügen / ändern....
Monentan habe ich 3 Listen (Typ, Size, Land). In diesen Listen gibt es jeweils das Feld (Titel), welches für diesen Fall relevant ist.

Hier ist mein aktueller Code:

(davor kommt noch der Javascriptteil für das Filtern, der schon funktioniert)
...
<div id="contactForm">
 <table cellspacing="15" cellpadding="0">
  <tbody>
   <tr>
    <td><b>Typ</b><br /></td>
    <td><b>Land</b> </td>
    <td><b>Size</b><br /></td>
   </tr>
   <tr>
    <td valign="top">
     <select id="Typ" size="15" name="Typ">
     <option selected>Alle</option>
     <option value="Typ Bla">Typ Bla</option>
     <option value="Typ Blub">Typ Blub</option>
     <option value="Typ Zack">Typ Zack</option>
     </select>
    </td>
    
    <td valign="top">
     <select id="Land" size="15" name="Land">
      <option selected>Alle</option>
      <option value="A">A</option>
      <option value="D">D</option>
      <option value="DK">DK</option>
      <option value="SK">SK</option>
     </select>
    </td>
  
    <td valign="top">
     <select id="size" size="15" name="size">
      <option selected>Alle</option>
      <option value="klein">klein</option> 
      <option value="mittel">mittel</option>
     </select>
    </td>
   </tr>
   <tr>
    <td colspan="3">
     <button onclick="submitForm(&#39;contactForm&#39;)">Suchen</button>
     <button onclick="javascript:window.open(&#39;default.aspx&#39;, &#39;_self&#39;)">Alle anzeigen</button>
    </td>
   </tr>
  </tbody>
 </table>
</div>


Derzeit kann man sehen, dass ich die Daten statisch einhacke... Schön ist das nicht... Ist es möglich, dass ich mit irgendeinem Quelltext (javascript, XSL o.ä.) die Listboxen mit den Inhalten der Listen fülle?! Das Webpart ist ein "Inhalts-Editor Webpart" und ich füge dann den Quellcode mit dem "Quelltexteditor" ein.

Danke schonmal für die Bemühungen,

Gruß, David

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Juli 2010 16:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Was Du da hast, ist "nur" HTML-Quellcode, kein echtes Webpart ;-)

Entweder Du programmierst ein Webpart, das die Daten per Objektmodell aus den Listen zieht, oder Du nimmst eine sharePoint Designer Datenansicht. Als Datenquelle verwendest Du eine verknüpfte Datenquelle aus allen drei Listen. Wenn Du jetzt das XSL entsprechend anpaßt, dann bekommst Du wieder das gewünschte Ergebnis.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
30 Beiträge
DavidSch. Als Antwort am 22 Juli 2010 11:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hey Meister Fandrich,

danke schonmal für deine Gute Antwort. Ich habe mich für die Variante mit dem Sharepoint Designer entschieden. Ich bin soweit, dass ich eine Datenquelle erstellt habe, die auf die drei Listen verknüpft. Dann hab ich mir die Datenquelldetails anzeigen lassen und das Titelfeld dann als "Ansicht für mehrere Einträge" eingefügt. Ich bekomme dann einer Tabellen angezeigt mit dem Inhalten (das sieht schonmal super aus). Jetzt soll die Tabelle nurnoch ein Listenboxfeld sein. Ich hab mich daran versucht das XSL entsprechend anzupassen, habs aber nicht ganz geschafft.

 

    <xsl:output method="html" indent="no"/>
     <xsl:decimal-format NaN=""/>
     <xsl:param name="dvt_apos">'</xsl:param>
     <xsl:variable name="dvt_1_automode">0</xsl:variable>
     <xsl:template match="/">
     <xsl:call-template name="dvt_1"/>
     </xsl:template>
     <xsl:template name="dvt_1">
      <xsl:variable name="dvt_StyleName">Table</xsl:variable>
       <xsl:variable name="Rows" select="/dsQueryResponse/Tagesordnung/Rows/Row"/>
       <table border="0" width="100%" cellpadding="2" cellspacing="0">
        <tr valign="top">
         <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
          <th class="ms-vh" width="1%" nowrap="nowrap"></th>
         </xsl:if>
         <th class="ms-vh" nowrap="nowrap">Betreff</th>
        </tr>
          <xsl:call-template name="dvt_1.body">
            <xsl:with-param name="Rows" select="$Rows"/>
          </xsl:call-template>
       </table>
     </xsl:template>
     <xsl:template name="dvt_1.body">
      <xsl:param name="Rows"/>
     
       <xsl:for-each select="$Rows">
        <xsl:call-template name="dvt_1.rowview"/>
       </xsl:for-each>
     
     </xsl:template>
     <xsl:template name="dvt_1.rowview">
      <tr>
       <xsl:if test="position() mod 2 = 1">
        <xsl:attribute name="class">ms-alternating</xsl:attribute>
       </xsl:if>
       <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
        <td class="ms-vb" width="1%" nowrap="nowrap">
        
         <span ddwrt:amkeyfield="" ddwrt:amkeyvalue="string($XPath)" ddwrt:ammode="view"></span>
        </td>
       </xsl:if>
       <td class="ms-vb">
       <select id="Feld1" size="3" name="Feld1">
        <option value="@Title"><xsl:value-of select="@Title"/></option>
       </select>

       </td>
      </tr>
     </xsl:template>


Der Zeigt mir momentan jedes Feld in einer einzelnen Listbox an. Hab auch schon anders versucht den Code zu bearbeiten, dann hab ich aber einmal eine leere Listbox gehabt und einmal die Inhalte weiterhin als Tabelle. Was muss ich da ändern? Hab bislang noch kein Ergebnis gefunden... Bin da wohl noch zu unerfahren was XSL angeht :-(

Danke schonmal :-)

Ohne Rang
30 Beiträge
DavidSch. Als Antwort am 22 Juli 2010 11:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Heyho, Hab das Problem erstmal selbst gelöst.  Hab einfach das Template "dvt_1.body" wie folgt geändert:

 

     <xsl:template name="dvt_1.body">
      <xsl:param name="Rows"/>
       <select id="Feld1" size="3" name="Feld1">
       <xsl:for-each select="$Rows">
      
        <option value="@Title"><xsl:value-of select="@Title"/></option>
   
 
       </xsl:for-each>
       </select>
      
     </xsl:template>

Jetzt muss ich erstmal schauen ob ich alles weitere schaffe!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juli 2010 11:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich kann Dir hier natürlich nicht das ganze XSL zurechtbiegen, deshalb nur eine kurze Skizze:

Das wichtigste für Dich ist <xsl:template name="dvt_1"> ... </xsl:template>
Darin wird das eigentliche HTML aufgebaut und der Rest ist nur das drumrum, z.B. die Tabellenzeilen, die Du nicht brauchst. Kopiere dorthin also Dein HTML. Dann identifizierst Du die relevanten Stellen (die, die dynamisch werden sollen). Das sind die Inhalte der <select> ... </select>

Dort machst Du dann sowas:
<xsl:for-each select="/dsQueryResponse/Tagesordnung/Rows/Row">
 <option value="{@Title}"><xsl:value-of select="@Title"/></option>
</xsl:for-each>

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
30 Beiträge
DavidSch. Als Antwort am 23 Juli 2010 08:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dankeschön für deine Tipps :-) Hab jetzt alles so "hingebogen" dass alles funktioniert.