Создаем VisualWebPart
aspx
<asp:Panel ID="FilterPanel" runat="server">
<asp:Label ID="_title_lbl" runat="server" Text="Название: "></asp:Label>
<asp:TextBox ID="_title_box" runat="server"></asp:TextBox>
<br/><br/>
<asp:Label ID="_user_lbl" runat="server" Text="Сотрудник: "></asp:Label>
<asp:TextBox ID="_user_box" runat="server"></asp:TextBox>
<br/><br/>
<asp:Button ID="_search_btn" runat="server" Text="Найти" OnClick="_search_btn_Click" />
<asp:Panel ID="ResultsPanel" runat="server"></asp:Panel>
</asp:Panel>
ascx.cs
UpdatePanel mainUpdatePanel;
SPList list;
ListViewWebPart lvwp;
protected void Page_Load(object sender, EventArgs e)
{
// Список
list = SPContext.Current.Web.GetList(SPUrlUtility.CombineUrl(SPContext.Current.Web.Url, "Lists/FiltredList"));
// Результаты
lvwp = new ListViewWebPart();
lvwp.ListName = list.ID.ToString("B").ToUpper();
lvwp.ViewGuid = list.DefaultView.ID.ToString("B").ToUpper();
lvwp.ChromeType = PartChromeType.Default;
mainUpdatePanel = new UpdatePanel();
mainUpdatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
mainUpdatePanel.ContentTemplateContainer.Controls.Add(_search_btn);
mainUpdatePanel.ContentTemplateContainer.Controls.Add(lvwp);
ResultsPanel.Controls.Add(mainUpdatePanel);
// Статическое условие
string query = string.Empty;
string additionalCondition = "<Or><Eq><FieldRef Name='ID' /><Value Type='Counter'>1</Value></Eq><Eq><FieldRef Name='ID' /><Value Type='Counter'>2</Value></Eq></Or>";
query = (query.Length > 0 ? "<And>" + query + additionalCondition + "</And>" : additionalCondition);
LoadData(query);
}
/// <summary>
/// Кнопка поиска
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void _search_btn_Click(object sender, EventArgs e)
{
string query = string.Empty;
string tempAdding = string.Empty;
if (!string.IsNullOrEmpty(_title_box.Text))
{
query = "<Contains><FieldRef Name='Title' /><Value Type='Text'>" + _title_box.Text + "</Value></Contains>";
}
if (!string.IsNullOrEmpty(_user_box.Text))
{
tempAdding = "<Contains><FieldRef Name='Users' /><Value Type='UserMulti'>" + _user_box.Text + "</Value></Contains>";
query = (query.Length > 0 ? "<And>" + query + tempAdding + "</And>" : tempAdding);
}
// Статическое условие
string additionalCondition = "<Or><Eq><FieldRef Name='ID' /><Value Type='Counter'>1</Value></Eq><Eq><FieldRef Name='ID' /><Value Type='Counter'>2</Value></Eq></Or>";
query = (query.Length > 0 ? "<And>" + query + additionalCondition + "</And>" : additionalCondition);
LoadData(query);
}
/// <summary>
/// Загрузка данных
/// </summary>
/// <param name="query"></param>
private void LoadData(string query)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(lvwp.ListViewXml);
XmlNode queryNode = doc.SelectSingleNode("//Query");
XmlNode whereNode = queryNode.SelectSingleNode("Where");
if (whereNode != null) queryNode.RemoveChild(whereNode);
XmlNode newNode = doc.CreateNode(XmlNodeType.Element, "Where", String.Empty);
newNode.InnerXml = query.ToString();
queryNode.AppendChild(newNode);
lvwp.ListViewXml = doc.OuterXml;
}
Для экспорта в Excel используем клиентский код, который работает в IE
<script language="javascript" type="text/javascript">
function generateexcel() {
var x = document.getElementById('{7BA8873E-1B90-4EAB-B446-23F93A590249}-{73FEA2BD-79BD-4F55-A8FE-E6DB310018DD}').rows;
var xls = new ActiveXObject("Excel.Application");
xls.visible = true
xls.Workbooks.Add
for (i = 0; i < x.length; i++) {
var y = x[i].cells;
for (j = 0; j < y.length; j++) {
xls.cells(i + 1, j + 1).value = y[j].innerText;
}
}
}
</script>
<input type='button' value='Export To Excel' onclick="generateexcel();"/>
