随笔 - 175  文章 - 1 评论 - 2380 阅读 - 43万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

WSS3.0中,过滤列表内容,可以采用以下方法:
1)采用视图,视图中配置过滤条件
2)开发过滤器WebPart,(见这篇文章:编写过滤器WebPart--过滤列表内容)--但是过滤器只能做到精确匹配,无法做模糊查询,大于,小于的限制。
3)开发一个查询webpart,提供CAML查询语句,把这个webpart跟列表放在一起,由它主动控制当前列表。这里就介绍这种方法。
wss的列表其实是一个webpart:ListViewWebPart,我们用SPD打开一个AllItems.aspx页面,转到Code模式,就可以看到ListViewWebPart,注意
ListViewWebPart一个很重要的属性:ListViewXml,就是包含着乱七八糟字符的那个,这是Html编码后的属性值,ListViewXml控制着ListViewWebPart的
显示,包括要输出的字段,查询条件,排序,只要控制ListViewXml就可以控制ListViewWebPart的输出。
那么,怎么做呢?
看以下的示例代码
public class CamlFilterWebPart:WebPart
{
private string _Caml;
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable]
public string Caml
{
set{_Caml=value;}
get{return _Caml;}
}
protected override void OnLoad(EventArgs e)
{
   base.OnLoad(e);       
   if( String.IsNullOrEmtpty(Caml) ) return ;
   try{
      foreach (WebPart wp in this.Zone.WebParts)
      {
            if (wp is Microsoft.SharePoint.WebPartPages.ListViewWebPart) //首先找到列表webpart
             {
             Microsoft.SharePoint.WebPartPages.ListViewWebPart listWp =
                             (Microsoft.SharePoint.WebPartPages.ListViewWebPart)wp;
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(istWp.ListViewXml);
             XmlNode queryNode = doc.DocumentElement.SelectSingleNode("Query");
             queryNode.InnerXml = this.
             listWp.ListViewXml = doc.InnerXml; //替换列表显示的Schema
             }
       }

    }catch(Exception ex)
    {
        this.Controls.Add(new LiteralControl(ex.Message));
    }
}
}

CamlFilterWebPart有一个可设计的属性Caml,可以存放查询条件。
CamlFilterWebPart加载的时候,自动获取同一个Zone的ListViewWebPart控制它的查询。
基于这个思路,我们可以作出很强大的查询控件,提供任意的查询条件来控制列表!
下一篇将继续对CamlFilterWebPart进行扩展...

后记:
当列表连接了其他webpart是,这个方法会失效,列表总是会按照视图的查询条件来显示。
要解决这个问题,强制清空列表WebPart的视图属性即可:
listWp.ViewGuid=""';



posted on   jianyi  阅读(3020)  评论(18编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示