最近主要做了一些关于Infragistics的webgrid后台动态添加的应用,现总结如下:
基本操作
1、动态添加、设置属性是对webgrid的dispaylayout的属性进行赋值
2、动态控制添加列属性
说 明:其中vcol是自己设定的一个枚举类型实例用于存储列的各类信息,例如数据库字段名、列宽、列头名等信息
必要设置:
this._dataListGrid.DisplayLayout.AutoGenerateColumns = false;
绑定过程:
UltraGridColumn newCol = new UltraGridColumn();
newCol.BaseColumnName = vcol.Id; //用于指定绑定的数据列,与table中的列相同
newCol.Header.Caption = vcol.Name;
newCol.Key = vcol.Name; //指定列的唯一标识,可按key找寻列
newCol.Width = Convert.ToInt32(vcol.Width);
newCol.Format = vcol.Format;
newCol.IsSortable(); //设定排序时需要
创建dataset或者datatable 获取数据(ds=。。。。。。)
为grid指定数据源例如(this._dataListGrid.DataSource = ds;)
3、自定义异步读取数据
必要设置:
this._dataListGrid.Browser = BrowserLevel.Xml;
this._dataListGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.Xml;
this._dataListGrid.DisplayLayout.XmlLoadOnDemandType = XmlLoadOnDemandType.Virtual;
this._dataListGrid.DisplayLayout.XmlLoadOnDemandType = XmlLoadOnDemandType.Synchronous;
//选择一种异步的方式
实现原理:
主要是在数据刷新时,通过向数据绑定方法中(也可用存储过程实现)传入每次刷新的起始行和结束行编号以及其他必要参数信息,扩充数据源实现的。
注:webGrid会自动记录操作之前的数据从而可以在dataset中实现真正意义上的异步更新,这也是webGrid做的相对优秀的地方。在另一个控件radGrid中就不提供这种记录之前数据的功能,因此也就无法实现在dataset中真正意义上的异步更新数据。
代码过程:
数据读取的具体代码示例,参见帮助文档中的webgrid-->data--> partial data binding部分
4、数据的排列
必要设置:
this._dataListGrid .DisplayLayout.HeaderClickActionDefault = HeaderClickAction.SortSingle;
this._dataListGrid.DisplayLayout.AllowSortingDefault = AllowSorting.OnClient;
代码过程:
排列过程参见,文档中column access下的overriding default column sort
参见此过程,结合partial data进行整合
5、将所有数据设定为超链接形式(非常有用)
第一种是在InitializeRow事件中通过指定具体列,来逐个单元格设定连接
protected void _dataListGrid_InitializeRow(object sender, RowEventArgs e)
{
//在每一行对列进行遍历,_datalist 是一个存放列信息的类对象
foreach (ColCollection vcl in 所有列集合) //这里就只是对所有的列进行循环,ColCollection 是自定义的列类型,存储列信息
//具体实现各尽其能吧
{
string url ;
if (vcl.Link.ToString().Trim().Equals("_onclick"))
{
url = "javascript:οnclick=gridOpenUrl(/"" + Server.HtmlEncode(url) + "/")";
e.Row.Cells.FromKey(vcl.Id).TargetURL = url;
}
//targeturl可以用来指定使用javascript的链接,实现了直接添加javascript代码,而不是简单的url链接
else
{
url= 要写的链接字符串,可以包含qerrystring;
url = "@[" + vcl.Link.ToString().Trim() + "]" + ResolveUrl(url);
e.Row.Cells.FromKey(vcl.Id).TargetURL = url;
}
//这里是写的有些乱,等有机会好好总结下,会给出更适合他人阅读的代码(现在只是给自己看而已~~)
}
}
}
第二种方法是通过模版列解决,没有具体实现,尝试过程中遇到数据绑定的问题,但是也在这里给出具体的网络资料链接
直接通过模版列添加链接,这里要写一个继承Itemplate接口的类具体如下:
参考:http://forums.infragistics.com/forums/p/2995/17876.aspx#17876