文章出處

本文介紹兩種為列表視圖設置時間段篩選器的方法。其中,第一個方法用于SharePoint Server,第二個方法同時還能用于SharePoint Foundation。

方法一:日期篩選器Web部件

先看一下接下來要用的列表,是一個任務列表:

為了實驗方便,我們先建個頁面,用來放置目標列表視圖和篩選器。

1、打開SPD,選擇左側的“網站頁面”,點擊功能區里的“新建”->"Web部件頁"。

如果是已有頁面,則右鍵高級模式編輯。

2、找到頁面主要區域的WebPart Zone,在其中的ZoneTemplate里插入光標。

選擇插入,數據視圖。插入目標列表。
3、在列表視圖工具中,選擇“篩選、排序和分組”中的“參數”。


新建兩個參數。參數源設為默認的無就可以。

4、然后,同樣使用功能區上的按鈕,為列表視圖設置篩選條件。使列表視圖顯示大于等于[StartDate]并且小于等于[EndDate]的項。


5、在該視圖webpart上方,插入兩個“日期篩選器”WebPart。


6、保存該頁面。然后點擊功能區的“在瀏覽器中預覽”按鈕。

7、進入頁面編輯模式。選擇第一個日期篩選器,在WebPart屬性中設置篩選器名稱,默認值。

再設置第二個。


8、接下來進行關聯。選擇第一個日期篩選器,選擇WebPart連接,篩選值發送位置。發送到下面的列表視圖。這里就是TaskDemo了。

9、在彈出窗口中選擇連接類型為參數獲取位置。點擊“配置”按鈕。

10、選擇接收方對應的參數名稱,這里為StartDate

11、完成后的設計視圖是這個樣子。

12、用同樣的方式設置第二個日期篩選器的連接。連到EndDate參數。

13、完成后退出頁面的設計模式。

測試結果:

 

方法二:控件傳參

這種方法是用我們自己擺放的控件來進行日期的輸入。相對來說自由度會高一些,當然難度也稍有增加。

1、首先也是頁面和列表視圖的準備工作。請參考方法一的第一步和第二步。

2、在視圖WebPart所在的WebPartZone外面,插入光標:

插入如下table和控件:

<table class="ms-formtable" style="margin-top: 8px;" border="0" cellspacing="0" cellpadding="0">
 <tbody>   
     
            <tr>
  <td width="113" class="ms-formlabel" nowrap="true" valign="top"><h3 class="ms-standardheader">
  <nobr>開始時間:<span title="這是必填字段。" class="ms-accentText"> *</span></nobr>
 </h3></td>
  <td width="350" class="ms-formbody" valign="top">
   <span dir="none"><asp:Textbox ID="scStartTextbox" runat="server" CssClass="ms-hide"></asp:Textbox>
   <SharePoint:DateTimeControl runat="server" DateOnly="true" ID="scStart" DatePickerFrameUrl="../_layouts/iframe.aspx"  />
   <br/></span>   
  </td>
 </tr>
    <tr>
  <td width="113" class="ms-formlabel" nowrap="true" valign="top"><h3 class="ms-standardheader">
  <nobr>結束時間:<span title="這是必填字段。" class="ms-accentText"> *</span></nobr>
 </h3></td>
  <td width="350" class="ms-formbody" valign="top">
   <span dir="none"><asp:Textbox ID="scEndTextbox" runat="server" CssClass="ms-hide"></asp:Textbox>
   <SharePoint:DateTimeControl runat="server" DateOnly="true" ID="scEnd"  DatePickerFrameUrl="../_layouts/iframe.aspx" />
  <br/></span>   
  </td>
 </tr>
 <tr><td colspan="2">
  <asp:Button runat="server" ID="btnSearch" Text="查詢" OnClientClick="javascript:SetStartEndDate()"/>

 </td></tr>
 </tbody>
 </table>

重點是用SharePoint DateTimeControl來方便日期輸入,和用隱藏的ASP.NET TextBox來存放控件值。ASP.NET Button用于頁面提交。同時,通過js把DateTimeControl的日期值填寫到相應的TextBox里。之所以這么繞一下,是因為下面的視圖WebPart接參時,無法直接從DateTimeControl這類的控件直接Get到Value。而TextBox可以。展示效果如下:

當然,本例用的是控件值類型的參數。我們也可以用查詢字符串類型的參數,把值拼到URL后面(參見霖雨的這篇博文)。
3、在PlaceHolderAdditionalPageHead部分,先插入jquery.js的引用,再插入我們的js代碼:

代碼如下:

<script src="../_layouts/15/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
String.prototype.replaceAll=function(str1,str2){
var regS=new RegExp(str1,"gi");
return this.replace(regS,str2);
}
function SetStartEndDate(name)
{
 var startstr="scStart";
 var endstr="scEnd";
 var selectedStartDate=$("input[id][name$='"+startstr+"Date']").val();
 selectedStartDate=selectedStartDate.replaceAll("/","-");
 $("input[id][name$='"+startstr+"Textbox']").val(selectedStartDate);
 
 var selectedEndDate=$("input[id][name$='"+endstr+"Date']").val();
 selectedEndDate=selectedEndDate.replaceAll("/","-");
 $("input[id][name$='"+endstr+"Textbox']").val(selectedEndDate);
}
</script>

4、同樣,也要給視圖WebPart設置參數和篩選。這里參數的來源選擇控件,控件ID為上面的TextBox的ID。篩選條件類似。步驟參考方法一的第3,4步。這里就直接上圖了。

 5、保存該頁面。然后點擊功能區的“在瀏覽器中預覽”按鈕。輸入一個時間段,點擊查詢來驗證結果。篩選的結果也和第一種類似,就不再贅述了。

 --------2016/4/13更新---------

kevin_k_wang反饋說第二種方法做到最后沒有結果。所以我重新測試了一下。發現目前版本確實有問題。

如果你也有類似問題,可以嘗試如下的解決辦法:

1、在SPD里點擊視圖部分的代碼,在頂部的功能區里可以看到列表視圖工具:

2、從設計選項卡里找到自定義XSLT,點擊自定義整個視圖。

3、SPD會自動生成很多代碼。保存。再測試一下是否有結果了。

到這里,很多人可能已經成功看到結果了。

(原因未知,猜測與SharePoint補丁版本有關)

如果還是不行,繼續下面的步驟:

1、在SPD頁面上,隨便找一個html的結束標記(當然,其他結束標記也行,比如CAML標記,XML標記,只要不產生歧義報錯就行)。我找了</table>標記,在后面加一個空格。

2、保存頁面。再測試一下是否有結果了。

所加的空格沒什么實際用處。解決問題后可以再刪掉。保存。同樣可以看到結果。

(原因未知,猜測為SPD的bug。)

 

另:

附上一份代碼,用來替換方法二中的第2,3步驟里的復雜table和js。如果只是測試控件過濾,用這個簡單版本就夠了。

<asp:Textbox ID="scStartTextbox" runat="server" Text="2015-01-01" ></asp:Textbox>
<asp:Textbox ID="scEndTextbox" runat="server" Text="2016-04-13" ></asp:Textbox>
<asp:Button runat="server" ID="btnSearch" Text="查詢"/>

 

參考資料

SharePoint: List filtering by date range

 

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()