VisualStudio2008环境下,使用WebPart实现自定义页面布局
2010-09-07 11:00
387 查看
VisualStudio2008环境下WebPart使用小结
A.使用WebPart的页面必须放置一个WebPartManager,用来管理页面上所有的WebPart,还可以设置
WebPart页的模式,字段布局页面只用到了两个状态,如下
LayoutWebPartManager.DisplayMode = WebPartManager.DesignDisplayMode;
LayoutWebPartManager.DisplayMode = WebPartManager.BrowseDisplayMode;
上面的两行代码分别将页面的显示模式设置为设计模式和浏览模式,设计模式下,可以将一个WebPart
拖动到页面上的任意一个WebPartZone中,在浏览模式下,可以看到拖动后页面的布局效果。
B.拖动WebPart时会触发WebPartManager的WebPartMoving事件,在这个事件中,可以利用参数
WebPartMovingEventArgs e取得如下内容
① 正在移动WebPart e.WebPart
② 借助WebPartManager取得正在移动WebPart的Index
int nWebPartIndex = LayoutWebPartManager.WebParts.IndexOf(e.WebPart);
③ 移动后WebPart所在的目标区域 e.Zone
④ 借助WebPartManager取得移动后WebPart所在的目标区域的Index
int nZoneIndex = LayoutWebPartManager.Zones.IndexOf(e.Zone) ;
⑤ 移动后WebPart在目标区域所处的位置 e.ZoneIndex
⑥ 满足一定的条件时,可以通过e.Cancel = true取消该事件
C.拖动WebPart成功后会触发WebPartManager的WebPartMoved事件,在这个事件中可以做一些移动成
功后需要处理的事情。比如在元素字段布局页面移动字段对应的WebPart成功后,它所在WebPartZone
中的所有WebPart的位置序号Index需要重新设置,保证这些位置序号Index连续。
D .利用WebPartManager的DeleteWebPart方法清除WebPartManager自己在WebPartZone加载的控件,
如下:
foreach (WebPartZone wpzItem in LayoutWebPartManager.Zones)
{
for (int n = wpzItem.WebParts.Count - 1; n >= 0; n--)
{
LayoutWebPartManager.DeleteWebPart(wpzItem.WebParts
);
}
}
E.利用WebPartManager的AddWebPart方法在WebPartZone中动态加载控件,这个方法需要三个参数,
第一个是需要加载的WebPart控件--WebPart webPart,第二个参数指定在哪个WebPartZone中添加--
WebPartZoneBase zone,第三个参数决定加到WebPartZone中的哪个位置--int zoneIndex,如下:
AddWebPartToZone(WebPart wpItem)
{
int zonePosition = Convert.ToInt32(wrpItem.zonePosition);
string strZoneID = "WebPartZone" + wrpItem.zoneInex;
WebPartZoneBase wpZone = LayoutWebPartManager.Zones[strZoneID];
LayoutWebPartManager.AddWebPart(wpItem, wpZone, zonePosition);
}
F.动态加载控件之后用FindControl方法通过ID找到对应控件,再设置这个控件的一些属性。如果在
加到WebPartZone之前,将WebPart中的控件的属性设置好后再加到WebPartZone中,会出现奇怪的问题
,目前也不知道为什么。
// 设置WebPart中Label的显示内容
Control ctrLabel = LayoutWebPartManager.Zones[strZoneID].WebParts
[zonePosition].FindControl("DisplayContent");
if (ctrLabel != null)
{
Label lbl = ctrLabel as Label;
lbl.Text = wrpItem.displayName;
}
// 设置WebPart中DropDownList的宽度
Control ctrInput = LayoutWebPartManager.Zones[strZoneID].WebParts
[zonePosition].FindControl("InputControl");
if (ctrInput != null)
{
DropDownList ddl = ctrInput as DropDownList;
ddl.Width = Convert.ToInt32(wrpItem.defaultWidth);
}
G.修改WebPartZone的标题和WebPartZone中没有控件时的提示信息,如下:
private void ModifyEmptyZoneText()
{
int nIndex = 1;
foreach (WebPartZone item in LayoutWebPartManager.Zones)
{
// WebPartZone的标题
item.HeaderText = PCConst.ELEMENTLAYOUTSET_WEBPARTZONE_HEADERTEXT +
nIndex.ToString();
// WebPartZone中没有控件时的提示信息
item.EmptyZoneText = PCConst.ELEMENTLAYOUTSET_WEBPARTZONE_EMPTYZONETEXT;
nIndex++;
}
}
H.动态生成WebPart
字段布局页面中使用WebPart布局,由于通过WebPartManager的AddWebPart方法只能在WebPartZone中
加入WebPart控件,所以将每个自定义字段类型对应的控件都封装成为一个独立的WebPart类,如下
public class FloatTextBoxWP : VWebPart
{
VTextBoxValidator txtInput;
public FloatTextBoxWP()
: base()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
tdControl = new TableCell();
txtInput = new VTextBoxValidator();
txtInput.ID = "InputControl";
txtInput.MatchType = VTextBoxValidator.enMatchType.DecimalNumber;
Panel pnl = new Panel();
pnl.Controls.Add(txtInput);
pnl.Enabled = false;
tdControl.Controls.Add(pnl);
trItem.Cells.Add(tdControl);
this.Controls.Add(trItem);
ChildControlsCreated = true;
}
}
在页面中使用WebPartManager的AddWebPart方法动态加载WebPart
LayoutWebPartManager.AddWebPart(wpItem, wpZone, zonePosition);
第一个参数是动态生成的WebPart控件,第二个参数是页面上放置的某个WetPartZone(目前由于无法动
态生成WetPartZone,所以在页面上静态放置了足够多的WetPartZone);第三个参数是WebPart在
WebPartZone中的位置。
在PageLoad事件中也需要每次都重新加载一次WebPart,否则找不到WebPart中的控件。
A.使用WebPart的页面必须放置一个WebPartManager,用来管理页面上所有的WebPart,还可以设置
WebPart页的模式,字段布局页面只用到了两个状态,如下
LayoutWebPartManager.DisplayMode = WebPartManager.DesignDisplayMode;
LayoutWebPartManager.DisplayMode = WebPartManager.BrowseDisplayMode;
上面的两行代码分别将页面的显示模式设置为设计模式和浏览模式,设计模式下,可以将一个WebPart
拖动到页面上的任意一个WebPartZone中,在浏览模式下,可以看到拖动后页面的布局效果。
B.拖动WebPart时会触发WebPartManager的WebPartMoving事件,在这个事件中,可以利用参数
WebPartMovingEventArgs e取得如下内容
① 正在移动WebPart e.WebPart
② 借助WebPartManager取得正在移动WebPart的Index
int nWebPartIndex = LayoutWebPartManager.WebParts.IndexOf(e.WebPart);
③ 移动后WebPart所在的目标区域 e.Zone
④ 借助WebPartManager取得移动后WebPart所在的目标区域的Index
int nZoneIndex = LayoutWebPartManager.Zones.IndexOf(e.Zone) ;
⑤ 移动后WebPart在目标区域所处的位置 e.ZoneIndex
⑥ 满足一定的条件时,可以通过e.Cancel = true取消该事件
C.拖动WebPart成功后会触发WebPartManager的WebPartMoved事件,在这个事件中可以做一些移动成
功后需要处理的事情。比如在元素字段布局页面移动字段对应的WebPart成功后,它所在WebPartZone
中的所有WebPart的位置序号Index需要重新设置,保证这些位置序号Index连续。
D .利用WebPartManager的DeleteWebPart方法清除WebPartManager自己在WebPartZone加载的控件,
如下:
foreach (WebPartZone wpzItem in LayoutWebPartManager.Zones)
{
for (int n = wpzItem.WebParts.Count - 1; n >= 0; n--)
{
LayoutWebPartManager.DeleteWebPart(wpzItem.WebParts
);
}
}
E.利用WebPartManager的AddWebPart方法在WebPartZone中动态加载控件,这个方法需要三个参数,
第一个是需要加载的WebPart控件--WebPart webPart,第二个参数指定在哪个WebPartZone中添加--
WebPartZoneBase zone,第三个参数决定加到WebPartZone中的哪个位置--int zoneIndex,如下:
AddWebPartToZone(WebPart wpItem)
{
int zonePosition = Convert.ToInt32(wrpItem.zonePosition);
string strZoneID = "WebPartZone" + wrpItem.zoneInex;
WebPartZoneBase wpZone = LayoutWebPartManager.Zones[strZoneID];
LayoutWebPartManager.AddWebPart(wpItem, wpZone, zonePosition);
}
F.动态加载控件之后用FindControl方法通过ID找到对应控件,再设置这个控件的一些属性。如果在
加到WebPartZone之前,将WebPart中的控件的属性设置好后再加到WebPartZone中,会出现奇怪的问题
,目前也不知道为什么。
// 设置WebPart中Label的显示内容
Control ctrLabel = LayoutWebPartManager.Zones[strZoneID].WebParts
[zonePosition].FindControl("DisplayContent");
if (ctrLabel != null)
{
Label lbl = ctrLabel as Label;
lbl.Text = wrpItem.displayName;
}
// 设置WebPart中DropDownList的宽度
Control ctrInput = LayoutWebPartManager.Zones[strZoneID].WebParts
[zonePosition].FindControl("InputControl");
if (ctrInput != null)
{
DropDownList ddl = ctrInput as DropDownList;
ddl.Width = Convert.ToInt32(wrpItem.defaultWidth);
}
G.修改WebPartZone的标题和WebPartZone中没有控件时的提示信息,如下:
private void ModifyEmptyZoneText()
{
int nIndex = 1;
foreach (WebPartZone item in LayoutWebPartManager.Zones)
{
// WebPartZone的标题
item.HeaderText = PCConst.ELEMENTLAYOUTSET_WEBPARTZONE_HEADERTEXT +
nIndex.ToString();
// WebPartZone中没有控件时的提示信息
item.EmptyZoneText = PCConst.ELEMENTLAYOUTSET_WEBPARTZONE_EMPTYZONETEXT;
nIndex++;
}
}
H.动态生成WebPart
字段布局页面中使用WebPart布局,由于通过WebPartManager的AddWebPart方法只能在WebPartZone中
加入WebPart控件,所以将每个自定义字段类型对应的控件都封装成为一个独立的WebPart类,如下
public class FloatTextBoxWP : VWebPart
{
VTextBoxValidator txtInput;
public FloatTextBoxWP()
: base()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
tdControl = new TableCell();
txtInput = new VTextBoxValidator();
txtInput.ID = "InputControl";
txtInput.MatchType = VTextBoxValidator.enMatchType.DecimalNumber;
Panel pnl = new Panel();
pnl.Controls.Add(txtInput);
pnl.Enabled = false;
tdControl.Controls.Add(pnl);
trItem.Cells.Add(tdControl);
this.Controls.Add(trItem);
ChildControlsCreated = true;
}
}
在页面中使用WebPartManager的AddWebPart方法动态加载WebPart
LayoutWebPartManager.AddWebPart(wpItem, wpZone, zonePosition);
第一个参数是动态生成的WebPart控件,第二个参数是页面上放置的某个WetPartZone(目前由于无法动
态生成WetPartZone,所以在页面上静态放置了足够多的WetPartZone);第三个参数是WebPart在
WebPartZone中的位置。
在PageLoad事件中也需要每次都重新加载一次WebPart,否则找不到WebPart中的控件。
相关文章推荐
- VisualStudio2008环境下,使用WebPart实现自定义页面布局
- Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) .
- 使用委托在用户自定义控件中实现事件响应
- 使用Repeater实现自定义多列数据绑定
- 使用Maven Profile实现多环境构建
- [volley文件上传]Android中自定义MultipartEntity实现文件上传以及使用Volley库实现文件上传
- 使用自定义的MessageSource实现对properties的复用
- Spring 消息本地化实现(使用注释实现)/使用自定义消息
- 使用SSM的时候添加自定义的监听器(实现已知的那几个接口)出现报错的问题 推荐
- WebPart(SharePoint)中如何使用自定义的Javascript和css样式
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- Html中使用自定义图片来实现checkbox显示的方法
- solr入门之edismax权重排序使用之Java代码实现自定义权重
- 使用Maven的Profile实现根据不同环境选用不同配置
- Gallery和自定义Adapter配合使用,实现图片预览
- CoordinatorLayout使用自定义Behavior实现UC浏览器顶栏效果
- 使用微信小程序自定义组件实现的tabs选项卡功能
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- JS中使用"data-"开头的属性及data()方法实现自定义属性
- Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)