showModelDialog 关闭后改变GridView某个单元格的值

.net Ajax 是一个非常不错的东西 方便的实现了B/S的异步数据传输,我们只需要在页开始加入

< asp:ScriptManager  runat ="server"  ID ="scriptManager" ></ asp:ScriptManager >

然后在需要用到异步传输的地方加上<UpdatePanel...></UpdatePanel> 经过简单设置,OK,一个ajax就完成了

但是当.net ajax有一个非常不好的地方,就是传输数据是整个页面的,数据量很大,网络不好的时候,就感觉很慢
我们的页面中有一个GridView,浏览这个页面时候,浏览器向服务器发送一个请求;
然后从服务器下载数据到本地;
接着我们按了某个按钮触发PostBack事件;
于是这个页面的GridView的数据又重新绑定,重新下载了一遍
但是很多时候我们只需要GridView中的部分内容改动就够了,所以整个GridView传输是没有必要的
这个时候我们可以用客户端的Javascript脚本实现对GridView中某个单元格的更改

比如我们的GridView中的ItemTemplate列里有一个按钮,一般我们都直接设置一下它的CommandName和CommandArgument进行服务器端操作的
这里我们可以把它做成客户端按钮Input,然后对它添加Onclick事件,showModelDialog出页面,让在服务器端执行的脚本在那个页面中执行
接着在关闭showModelDialog的时候,更改页面中GridView的某个对应的单元格的值

GridView解析到页面Html时候,它是一个XML格式的HTML文本,我们用Javascript脚本可以按照找节点(Node)的方式去实现找到某个单元格
下面是一个例子,这里我用A链接实现,如果是input也是一样的


                            
< asp:TemplateField  HeaderText ="Action" >
                                
< ItemTemplate >
                                
< div  style ="text-align:center" >
                                    
< href ='editCampaign.aspx?campaignID=<%#  Eval("campaignID") % > ' class="CommonTextButton">
                                        Edit
</ a >
                                    
< href ='javascript:void(0);'  onclick ="ShowTestDialog('runCampaign.aspx?CampaignID=<%# Eval(" campaignID") % > &action =testRun','testRun',this);" class="CommonTextButton">
                                        Test
</ a >
                                    
< href ='javascript:void(0);'  onclick ="ShowTestDialog('runCampaign.aspx?CampaignID=<%# Eval(" campaignID") % > &action =releaseRun','releaseRun',this);" class="CommonTextButton">
                                        Release
</ a >
                                    
< href ='javascript:void(0);'  onclick ="ShowTestDialog('runCampaign.aspx?CampaignID=<%# Eval(" campaignID") % > &action =releaseDebugRun','releaseDebugRun',this);" class="CommonTextButton">
                                        Debug Release
</ a >
                                
</ div >
                                
</ ItemTemplate >
                            
</ asp:TemplateField >

这里a链接的href设为 javascript:void(0); 这是让页面不会跳 如果我们用#如果页面比较长,就会跳到页首的
                    < script language = " javascript "  type = " text/javascript " >
                   
function  ShowTestDialog(url,type,sender)
                   
{
                       
if(type == "testRun")
                       
{
                            window.showModalDialog(url,'v','dialogWidth:500px;dialogHeight:100px;status:
0;help:0');
                            sender.parentNode.parentNode.parentNode.childNodes[
3].innerHTML=Date();
                       }

                       
else if(type == "releaseRun")
                       
{
                            
var arr = window.showModalDialog(url,'w','dialogWidth:500px;dialogHeight:100px;status:0;help:0');
                            sender.parentNode.parentNode.parentNode.childNodes[
4].innerHTML=Date();
                       }

                       
else
                       
{
                            window.showModalDialog(url,'x','dialogWidth:500px;dialogHeight:115px;status:
0;help:0');
                       }

                       
                   }

                   
</ script >

runCampaign.aspx中是事件处理的方法,页面的head里面需要简单设置下
< head  runat ="server" >
    
< title > Run Campaign </ title >
    
< base  target ="_self"   />
</ head >

你可能感兴趣的:(GridView)