最近项目中要把ultrawebgrid的一列编程弹出日历控件,但是ultrawebgrid没有找到模板列这个功能,所以就自己弄了一个弹出日历选择控件的样子。
是这样做的:先做一个隐藏的image或者什么,然后弄个弹出层之类的,总之就是在ultrawebgrid的onclick事件调用image的click事件,
然后弹出日历选择的div,然后把值再赋给ultrawebgrid的cell,但是这里又遇到了一个问题,因为这个cell是与数据库绑定的,所以一定要注意ultrawebgrid的每一个cell的类型,因为开始的时候绑定的是数据库的日期字段,不知道是number类型还是datetime类型,然后哪个cell虽然是可编辑的,但是就是不能把值放上去,后来把这个cell的类型改为string类型就可以了。然后及时要把ultrawebgrid的cell编程可编辑的。代码如下
//grid上加一列
_gridRegistFileCategoryColumns.Add("Expirydate", "Text", 4, 50, false);
//change type
this.GridRegistFileCategory.Columns.FromKey("Expirydate").DataType = System.Type.GetType("System.String").ToString();
//can update
_gridRegistFileCategory.Columns.FromKey("Expirydate").AllowUpdate = AllowUpdate.Yes;
//can edit
e.Row.Cells.FromKey("Expirydate").AllowEditing = AllowEditing.No;
前台页面
//在grid上添加oncick事件
<ClientSideEvents AfterExitEditModeHandler="SetEditFlag" AfterCellUpdateHandler="AfterCellUpdate">
</ClientSideEvents>
//click event
function OnMouseUp(tableName, itemName) {
var column = igtbl_getColumnById(itemName);
if (column != null) {
var cell = igtbl_getCellById(itemName);
if (cell != null) {
if (cell.Column.Key == "EXPIRYDATE") {
document.getElementById("<%=txtChangedDate.ClientID %>").value = cell.getValue();
document.getElementById("<%=txtChangedDate.ClientID %>").click();
if (document.getElementById("<%=txtChangedDate.ClientID %>").value == "null") {
cell.setValue(" ");
}
else {
cell.setValue(document.getElementById("<%=txtChangedDate.ClientID %>").value);
}
}
}
return false;
}