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>

posted on 2007-12-11 10:20  jerreychen  阅读(614)  评论(0编辑  收藏  举报

导航