煥SPFieldMultiColumn
對象使用的方法override BaseFieldControl FieldRenderingControl
它加載哪個繼承BaseFieldControl
從BaseFieldControl
繼承對象,
所以,該對象具有調用一個方法
protected override void RenderFieldForDisplay(HtmlTextWriter output){}
在此方法可以使你適合你的控制。
您可以使用下面
namespace SharePointTestApplication
{
public class UserChoiceColumn:SPFieldMultiColumn
{
public UserChoiceColumn(SPFieldCollection fields, string fname)
: base(fields, fname) { }
public UserChoiceColumn(SPFieldCollection fields, string tname, string dname)
: base(fields, tname, dname) { }
public override BaseFieldControl FieldRenderingControl
{
get
{
BaseFieldControl ctr = new UserChoiceColumnControlType();
ctr.FieldName = this.InternalName;
return ctr;
}
}
public override string GetFieldValueAsHtml(object value)
{
SPFieldMultiColumnValue mcv = new SPFieldMultiColumnValue(value.ToString());
return string.Format("{0} , {1}",mcv[0],mcv[1]);
}
}
public class UserChoiceColumnControlType : BaseFieldControl
{
#region Protected Members
protected TextBox TextBox1;
protected TextBox TextBox2;
#endregion
protected override string DefaultTemplateName
{
get
{
return "UserChoiceColumnTemplate";
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
TextBox1 = (TextBox)this.TemplateContainer.FindControl("TextBox1");
TextBox2 = (TextBox)this.TemplateContainer.FindControl("TextBox2");
}
public override object Value
{
get
{
this.EnsureChildControls();
SPFieldMultiColumnValue mcv = new SPFieldMultiColumnValue(2);
mcv[0] = TextBox1.Text;
mcv[1] = TextBox2.Text;
return mcv;
}
set
{
this.EnsureChildControls();
SPFieldMultiColumnValue mcv = (SPFieldMultiColumnValue)this.ItemFieldValue;
TextBox1.Text = mcv[0];
TextBox2.Text = mcv[1];
}
}
**protected override void RenderFieldForDisplay(HtmlTextWriter output)
{
output.Write("hello world");
// base.RenderFieldForDisplay(output);
}**
}
}
感謝例子,我已經創建的自定義字段,但是我需要一個CAML循環來在多列字段中的每個子欄來調整它的appearence – 2010-11-28 09:52:58
我想的一個自定義字段.asx控件,您可以完全控制渲染體驗。 – Nat 2010-11-28 20:06:16
切換到xslt。它有更深刻的特徵 – 2011-12-12 15:23:32