根据上面一篇随笔所介绍的PC购买流程的项目,在项目中,需要有一个生成 订单的功能,能够使得Admin很方便的在获得批准的申请中选取一些来生成订单 ,要求界面操作简单明了,大概的效果图如下:
开发详解:一个Feature中使用SPGridView的几个Tips-">
点击checkbox,自动计算当前订单的总价值,点击按钮,生成订单。
有此想到了用SPGridView这个现成的控件来完成,以前也用过这个控件,其 实和GridView没什么大区别。这里就简单介绍一下了:
首先Create 一个WebPart
在CreateChildControls()中可以设置SPGridView 的数据源和属性,添加 Field等等。
但是CheckBox这一列,必须自己自定义一个模板类来生成,下面是我们自定 义的CheckBox模板类,它实现了ITemplate接口:
class CheckBoxTemplateField:ITemplate
{
string id;
public EventHandler OnCheck = null;
public CheckBoxTemplateField(string chbId, EventHandler checkEvent)
{
id = chbId;
OnCheck = checkEvent;
}
public void InstantiateIn(System.Web.UI.Control container)
{
CheckBox chb = new CheckBox();
chb.AutoPostBack = true;
chb.ID = id;
chb.CheckedChanged += OnCheck;
container.Controls.Add(chb);
}
}
这样就可以在SPGridView中调用这个模板类,并且为Oncheck事件提供处理方 法:
protected override void CreateChildControls()
{
if (!_error)
{
try
{
SPList sourceList = SPContext.Current.Web.Lists["Purchase Request"];
dataSource = new SPDataSource();
this.Controls.Add (dataSource);
dataSource.List = sourceList;
gridView = new SPGridView();
gridView.AutoGenerateColumns = false;
TemplateField chbField = new TemplateField();
chbField.HeaderText = "";
EventHandler onCheck = new EventHandler(OnCheck);
chbField.ItemTemplate = new CheckBoxTemplateField("chb", onCheck);
gridView.Columns.Add (chbField);