Комментарии можно оставлять "здесь"
Когда создаём визуальную веб-часть, то в большинстве случаев хотелось бы сделать так, чтобы она была универсальной, т.е. или автоматически вычислялись свойства (не всегда возможно) или пользователь мог сам устанавливать правила поведения.
В данной статье приведу пример как добавить собственные свойства к визуальной веб-части.
1. Добавим в проект визуальную веб часть.
2. В класс веб-части добавим свойство "Название". В реальных условия, конечно, нужно будет использовать что-нибудь практичнее, например, имя списка, название сайта и т.п.
using
System;
using
System.ComponentModel;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
Microsoft.SharePoint;
using
Microsoft.SharePoint.WebControls;
namespace
blog.VisualWebPart1
{
[ToolboxItemAttribute(false)]
public class VisualWebPart1 : WebPart
{
// Visual Studio может автоматически обновлять этот путь при
изменении данного элемента проекта визуальной веб-части.
private const string _ascxPath = @"~/_CONTROLTEMPLATES/blog/VisualWebPart1/VisualWebPart1UserControl.ascx";
protected
override void
CreateChildControls()
{
Control
control = Page.LoadControl(_ascxPath);
Controls.Add(control);
}
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true)]
[Category("Настрока")]
[WebDisplayName("MyTitle")]
[Description("Моё название")]
public string MyTitle { get;
set; }
}
}
3. Добавим в разметку label, который отобразит введённое свойство.
<asp:Label
runat="server"
ID="lbTitle"
Text=""
/>
4. В обработчике события загрузки страницы прочитаем значение свойства.
protected
void Page_Load(object
sender, EventArgs e)
{
string
propValue = (this.Parent as VisualWebPart1).MyTitle;
lbTitle.Text = propValue;
}
5. Разворачиваем и проверяем.
Добавим на страницу нашу веб-часть. Перейдём в её свойства
Появилась новая категория "Настройка". В ней есть наше свойство "MyTitle".
Устанавливаем в него значение. Сохраняем. Видим, что веб часть отобразила установленное нами значение.
Пример классического применения собственных свойств может быть написание веб-части, отображающей анонсы или новости в нестандартном виде. В настройки выносятся реквизиты списка или сайта, с которого берутся данные.
Вот пример, как можно реализовать выбор в виде выпадающего списка
Достаточно описать свойство в следующем виде:
public
enum ddlValues
{
v1 = 0,
v2,
v3
};
protected
ddlValues propValues;
[Personalizable(PersonalizationScope.User), WebBrowsable,Category("Настрока"), WebDisplayName("ddlValues"), WebDescription("")]
public ddlValues PropValues
{
get
{ return propValues; }
set { propValues = value; }
}
а считывать его аналогично:
string
propValue2 = (this.Parent as VisualWebPart1).PropValues.ToString();
Далее можно рассмотреть более сложный пример.
Создадим собственную область, где можно будет создать любую логику (например,целый справочник в свойствах с функциями добавления удаления).
1. Добавим новое свойство и новые обработчики событий в класс веб части:
Функция GetToolParts дает возможность в любой последовательности и в любом составе отображать блоки свойств. customToolParts - это блок с нашим свойством "MyTitle". standardToolParts - можно догадаться, что стандартные свойства. CustomToolPart - это наша новая область, которые мы и опишем ниже.
Важно: Наша веб-часть должна наследоваться от Microsoft.SharePoint.WebPartPages.WebPart
2. Опишем нашу новую область в отдельном классе.
Здесь в область добавляется контрол выпадающего списка со значениями, которые можно устанавливать динамически любые. При сохранении свойств, считывается выбранное значение и передается в наше свойство. Именно здесь можно реализовать любую логику.
Результат должен выглядеть примерно так:
Комментарии можно оставлять "здесь"
Далее можно рассмотреть более сложный пример.
Создадим собственную область, где можно будет создать любую логику (например,целый справочник в свойствах с функциями добавления удаления).
1. Добавим новое свойство и новые обработчики событий в класс веб части:
public
string ddlValue { get;
set; }
protected
override void
Render(HtmlTextWriter writer)
{
base.Render(writer);
writer.Write(ddlValue);
}
public override ToolPart[]
GetToolParts()
{
ToolPart[]
allToolParts = new ToolPart[3];
WebPartToolPart
standardToolParts = new WebPartToolPart();
CustomPropertyToolPart
customToolParts = new CustomPropertyToolPart();
allToolParts[2] = standardToolParts;
allToolParts[1] = customToolParts;
allToolParts[0] = new CustomToolPart();
return allToolParts;
}
Функция Render в нашем случаи является необязательной, но как пример полезна. С её помощью можно выводить значение нашего свойства непосредственно в разметку или корректировать текущую.Функция GetToolParts дает возможность в любой последовательности и в любом составе отображать блоки свойств. customToolParts - это блок с нашим свойством "MyTitle". standardToolParts - можно догадаться, что стандартные свойства. CustomToolPart - это наша новая область, которые мы и опишем ниже.
Важно: Наша веб-часть должна наследоваться от Microsoft.SharePoint.WebPartPages.WebPart
2. Опишем нашу новую область в отдельном классе.
public
class CustomToolPart
: Microsoft.SharePoint.WebPartPages.ToolPart
{
DropDownList
ddl;
Panel toolPartPanel;
protected
override void
CreateChildControls()
{
toolPartPanel = new Panel();
ddl = new
DropDownList() { ID="ddl"};
ddl.Items.Add("v1");ddl.Items.Add("v2");ddl.Items.Add("v3");
toolPartPanel.Controls.Add(new LiteralControl("<b>Собственный контрол</b> <br/>"));
toolPartPanel.Controls.Add(ddl);
Controls.Add(toolPartPanel);
base.CreateChildControls();
}
public override void
ApplyChanges()
{
VisualWebPart1
wp = (VisualWebPart1)this.ParentToolPane.SelectedWebPart;
wp.ddlValue = ddl.SelectedValue;
}
}
Здесь в область добавляется контрол выпадающего списка со значениями, которые можно устанавливать динамически любые. При сохранении свойств, считывается выбранное значение и передается в наше свойство. Именно здесь можно реализовать любую логику.
Результат должен выглядеть примерно так:
Комментарии можно оставлять "здесь"
Комментариев нет:
Отправить комментарий