zoukankan      html  css  js  c++  java
  • 为List配置一个搜索按钮

    查询前的List首页,只有一个cusotmer
    customer下面有个Project文件夹和Cusotmer Complaint文件
    其中Customer Complaint.txt文件是有多个属性的
    现在开始针对文档库中所有的文件 和文件夹进行模糊查询
    前段代码
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SearchList.ascx.cs" Inherits="MySharePointDev.Public.SearchList" %>
    <table>
        
    <tr>
            
    <td>
                
    <asp:Label ID="labKeyWord" runat="server" Text="KeyWord:" Font-Bold="True" ></asp:Label>
                
    <asp:TextBox ID="tbKeyWord" runat="server" ></asp:TextBox>
                
    <asp:Button ID="btnSearch" runat="server" onclick="btnSearch_Click" 
                    Text
    ="Search" />
            
    </td>
        
    </tr>
    </table>
    后端代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebPartPages;
    using System.Xml;
    using System.Web.UI.WebControls.WebParts;

    namespace MySharePointDev.Public
    {
        
    public partial class SearchList : BaseSPWebPart
        {
            
    private string _QueryFields = "Title;";
            [Personalizable(PersonalizationScope.Shared)]
            [WebBrowsable]
            [WebDisplayName(
    "查询的字段显示名,以分号分隔开")]
            
    public string QueryFields
            {
                
    get 
                {
                    
    if (_QueryFields.EndsWith(";"))//防止以;结束
                    {
                        
    return _QueryFields.Substring(0, _QueryFields.Length - 2);
                    }
                    
    else
                    {
                        
    return _QueryFields;
                    }
                }
                
    set { _QueryFields = value; }
            }


            
    private SPList List
            {
                
    get
                {
                    
    return SPContext.Current.List;
                }
            }

            
    protected void Page_Load(object sender, EventArgs e)
            {
                
    //this.ExportMode = WebPartExportMode.All;
                tbKeyWord.ToolTip = "Please input: " + QueryFields;
            }

            
    /// <summary>
            
    /// search
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>

            
    protected void btnSearch_Click(object sender, EventArgs e)
            {
                
    if (this.tbKeyWord.Text != "")
                {
                    
    string[] fields = QueryFields.Split(';');
                    
    string cmal = "";
                    
    foreach (string field in fields)
                    {
                        
    if (cmal == ""//第一个参数
                        {
                            cmal 
    = string.Format(@"<Contains>
                                                                  <FieldRef Name='{0}' />
                                                                  <Value Type='{1}'>{2}</Value>
                                                               </Contains>
                                                               
    ", List.Fields[field].InternalName, List.Fields[field].Type.ToString(), this.tbKeyWord.Text.ToString());
                        }
                        
    else
                        {
                            cmal 
    = "<Or>" + cmal + string.Format(@"<Contains>
                                                                  <FieldRef Name='{0}' />
                                                                  <Value Type='{1}'>{2}</Value>
                                                               </Contains></Or>
                                                               
    ", List.Fields[field].InternalName, List.Fields[field].Type.ToString(), this.tbKeyWord.Text.ToString());
                        }
                        
                    }
                    cmal 
    = "<Where>" + cmal + "</Where>";
                    
    this.SetCurrentListViewSchemaQuery(cmal);
                    
                }

            }

            
    /// <summary>
            
    /// 设置当前list的视图 schema query 
            
    /// </summary>
            
    /// <param name="cmal"></param>
            private void SetCurrentListViewSchemaQuery(string cmal)
            {
                
    if (!string.IsNullOrEmpty(cmal))
                {
                    
    string str = "{" + this.List.ID.ToString() + "}";

                    ControlCollection cc 
    = this.Page.Controls;
                    GetControls(
    ref  cc, str, cmal);


                }
            }
            
    /// <summary>
            
    /// 遍历所有页面中所有控件
            
    /// </summary>
            
    /// <param name="cs">页面控件集</param>
            
    /// <param name="str"></param>
            
    /// <param name="cmal"></param>
            private void GetControls(ref ControlCollection cs, string str, string cmal)
            {
                
    foreach (Control webPart in cs)
                {
                    
    if (webPart.HasControls())
                    {
                        ControlCollection cc 
    = webPart.Controls;
                        GetControls(
    ref  cc, str, cmal);
                    }

                    
    if (webPart is ListViewWebPart)
                    {
                        ListViewWebPart listViewWebPart 
    = (ListViewWebPart)webPart;
                        
    if (string.Compare(listViewWebPart.ListName, str, true!= 0)
                        {
                            
    continue;
                        }

                        
    if (string.IsNullOrEmpty(cmal))
                        {
                            listViewWebPart.ListViewXml 
    = this.List.Views[new Guid(listViewWebPart.ViewGuid)].HtmlSchemaXml;

                        }
                        
    else
                        {
                            
    //申明个新的XmlDocument,将listViewWebPart的ListViewXml装载进去
                            XmlDocument xmlDocument = new XmlDocument();
                            xmlDocument.LoadXml(listViewWebPart.ListViewXml);

                            
    //用cmal替换掉原有的查询语句
                            this.ChangeSchemaXmlCaml(xmlDocument, cmal);
                            listViewWebPart.ListViewXml 
    = xmlDocument.InnerXml;
                        }
                    }
                }
            }

            
    /// <summary>
            
    /// move where 去除外部的Where和/Where
            
    /// </summary>
            
    /// <param name="q"></param>
            
    /// <returns></returns>
            private string GetInnerQuery(string q)
            {
                XmlDocument docuemnt 
    = new XmlDocument();
                docuemnt.LoadXml(q);
                
    return docuemnt.DocumentElement.InnerXml;
            }
            
    /// <summary>
            
    /// change schema xml query 
            
    /// </summary>
            
    /// <param name="xmlDocument"></param>
            
    /// <param name="query"></param>
            private void ChangeSchemaXmlCaml(XmlDocument xmlDocument, string query)
            {
                
    if (!string.IsNullOrEmpty(query))
                {
                    
    string innerXml = this.GetInnerQuery(query);
                    
    if (innerXml != "")
                    {
                        
    //获得Query部分的XmlNode
                        XmlNode node = xmlDocument.DocumentElement.SelectSingleNode("Query");
                        XmlNode oldChild 
    = node.SelectSingleNode("Where");

                        
    //如果有Where,去除它
                        if (oldChild != null)
                        {
                            node.RemoveChild(oldChild);
                        }
                        
    //新建一个Where,并将我们的query的主体内容赋值给其InnerXml,并在QuerNode中添该Node
                        XmlNode newChild = xmlDocument.CreateElement("Where");
                        newChild.InnerXml 
    = innerXml;
                        node.AppendChild(newChild);

                        
    //将搜索文件的类型修改为list中的所有文件和文件夹,默认为只搜索当前目录下的文件
                        if (xmlDocument.DocumentElement.Attributes["Scope"== null)
                        {
                            XmlAttribute attScope 
    = xmlDocument.CreateAttribute("Scope");
                            attScope.Value 
    = "RecursiveAll";
                            xmlDocument.DocumentElement.Attributes.Append(attScope);
                        }
                        
    else
                        {
                            xmlDocument.DocumentElement.Attributes[
    "Scope"].Value = "RecursiveAll";
                        }
                            
                            
                        
    //替换XML中的ViewEmpty部分,该部分显示没有数据的时候的内容
                        xmlDocument.DocumentElement.SelectSingleNode("ViewEmpty").InnerXml = "<HTML><![CDATA[<font color='red'><b>No Results match keyword!</b></font>]]></HTML>";
                    }

                }
            }


        }
    }
  • 相关阅读:
    内部类
    Tomcat 配置安装
    Eclipse转idea改设置
    MyEclipse增强代码补全
    06、自动挂载+超级守护进程+时间同步+tcpwrapper+软硬链接+日志管理
    05、ip划分+网络配置+虚拟化基础+基本路由
    04、rpm+yum+tar解压
    03、磁盘管理+swap分区创建+磁盘配额+自动挂载
    02、用户管理
    01、Linux基础命令
  • 原文地址:https://www.cnblogs.com/ceci/p/1615592.html
Copyright © 2011-2022 走看看