今天突然想在Gridpanel的某列上插入超链接,实现点击功能。但是找遍网上的资料,都没发现合适的。于是就尝试了很多方法,最终成功了,这里和大家分享下我的成果!原来,有很多技巧其实都需要不断的创新和发现。
这边我和大家展示的是部分代码,Gridpanel中的列,注意加粗红色的部分。
<ext:GridPanel ID="FileRegGrid" runat="server" Title=">>收文登记列表" StripeRows="true" Height="400"
StoreID="FileInfoStore" AutoExpandColum="list" Margins="10 20 0 20" TrackMouseOver="true">
<ColumnModel ID="ColumnModel" runat="server">
<Columns>
<ext:Column Header="收文编号" width="80" DataIndex="ID" />
<ext:Column Header="档案题名" width="130" DataIndex="TitleName" />
<ext:Column Header="档案编号" width="80" DataIndex="TitleID" />
<ext:Column Header="链接" Width="80" DataIndex="TitleID">
<Renderer Fn="details"/>
</ext:Column>
<ext:Column Header="档案状态" width="130" DataIndex="FilesStatus" />
<ext:Column Header="收文日期" width="80" DataIndex="SystemDateTime">
<Renderer Fn="Ext.util.Format.dateRenderer('Y-m-d H:i:s')" />
</ext:Column>
<ext:Column Header="成文日期" width="80" DataIndex="OnFileDateTime">
<Renderer Fn="Ext.util.Format.dateRenderer('Y-m-d')" />
</ext:Column>
<ext:Column Header="密级" width="80" DataIndex="SecretsLevelName" />
<ext:Column Header="保管期限" width="80" DataIndex="TimeLimit" />
<ext:CommandColumn Width="60" Header="操作" GroupName="Operate">
<Commands>
<ext:GridCommand Icon="Pencil" CommandName="Edit">
<ToolTip Text="编辑" />
</ext:GridCommand>
<ext:GridCommand Icon="Delete" CommandName="Delete">
<ToolTip Text="删除" />
</ext:GridCommand>
</Commands>
</ext:CommandColumn>
</Columns>
</ColumnModel>
</ext:GridPanel>
renderer一般用于Grid中对列模型的渲染上 其详细信息记录在 Ext.grid.ColumnModel 中的 setRenderer( Number col, Function fn ) 方法里。
renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){}
含有的参数的介绍:
1.value是当前单元格的值。
2.cellmeta里保存的是cellId单元格id,id是列号,css是这个单元格的css样式。
3.record是这行的所有数据,你想要什么,record.data["id"]这样就获得了。
4.rowIndex是行号,不是从头往下数的意思,而是计算了分页以后的结果。
5.columnIndex列号。
6.store,这个厉害,实际上这个是你构造表格时候传递的ds,也就是说表格里所有的数据,你都可以随便调用,唉,太厉害了。
(说的不对,请前辈斧正!),这边的Fn后面的是Js的函数名:
function details(Id) {
var temp = '<a href="Details.aspx?Id={0}" target="_blank" style="color:blue">查看</a>';
return String.format(temp, Id);
}
效果图:
点击查看,跳转页面,通过地址可以看到,同时传递了ID过去,可以做相应的页面跳转,获取id的工作。
接着,我对上面的代码进行了改进。点击超链接的时候,弹出的是新建的页面。
function winShow() {
question = confirm("确实要用新窗口打开站点吗?")
if (question != "0") {
window.open("ZL_IdentifyAdd.aspx", "NewWin", "status=yes, height=400, width=600");
}
}
function details(Id) {
var temp = '<a href="#" οnclick="winShow()" style="color:blue">查看</a>';
}
效果图
弹出提示框,点击确定,小窗口打开页面
这是,我又有了新的想法,能不能直接弹出同张页面上的Window呢,但是之前我就试过Handler="#{window_id}.show()";的方法弹出Window窗口。
于是,我和朋友讨论了下,他提供了下思路,我尝试了下,也成功了。
大致的思路是:还是在列上触发details的Function。然后在details函数中实现点击超链接跳转到另一个函数btnClick,btnClick则是实现按钮的点击事件。在这之前,要先新建个button控件,设置Hidden=“true”。然后在button的Listener事件中添加具体的Click点击,通过Handler的方法实现window的弹出事件。有人可能要问,为什么话怎么多的功夫,直接在details函数中实现window的弹出不就可以了,但是我试过发现不行诶(可能有什么方法能实现,希望知道的朋友能指教,这边小弟先谢过!)。
好了下面就直接上代码了,这是Button控件,设置Hidden和点击事件,点击弹出window,FileReg_win是要弹出的Window的ID:
<ext:Button ID="Link" runat="server" Hidden="true">
<Listeners>
<Click Handler="#{FileReg_win}.show();" />
</Listeners>
</ext:Button>
接下来就是具体的js函数:
function details(Id) {
var temp = '<a href="#" οnclick=" btnClick()" style="color:blue">超链接</a>';
return String.format(temp, Id);
}
function btnClick() {
document.getElementById("Link").click();
}
这样,就能实现点击超链接,弹出Window了。还等什么,试试呗!由于是临时写的,没很好的排版整理,大家谅解。