题记:
做BS架构的应用系统,最让人不满的操作方便性上始终无法和CS的应用媲美。希望不断的改进BS系统的易用性是大家共同的心愿。
在BS系统上,业务数据的编辑方式,最常见的是逐条用表单编辑提交。用户常常说,为啥不象Excel一样可以批量操作?于是在DataGrid/GridView控件中使用模板列,每个格子里放一个文本框。让用户直接录入,批量提交。
用户又说了,有些信息我几乎所有的人都差不多,一个个的填麻烦啊,能不能改进下?
我说:能!于是有了这篇博文,呵呵,供大家参考。
思路:
大家还记得IE浏览器中如何设置代理服务器的吧?呵呵。见下图
看,如果填写的内容差不多,可以只录入一次的,呵呵。因此我就设想了如下的使用场景:
大家,看——
如果标题行的复选框没选中,那么,整列的内容都随着第一行的内容变化!不选中的列,则不受影响。
除此之外,我还实现了以下功能:
特点:第一行的内容变化,其他行虽然变化,但用户依然可以对个别数据进行调整,可以大同小异,差异化操作。呵呵
特点:标题行的复选框选中后,然后如果再取消选择,其他文本框的内容可以复原。也就是记住开始的数值,撤消一致。
特点:可以不局限于文本框,各种控件都可以。自定义和用户控件可能要相应修改少量脚本。这里的示例使用了日期控件。
特点:IE6、IE7、Firefox下测试都通过。
我下面给出示例性代码,供大家参考。难度很小,大家一看就懂。大家照着思路和提示,相信很快可以完成自己批量操作功能。呵呵
javascript:脚本是关键啊
<script type="text/javascript" language="javascript">
TS_Util=new Object();
TS_Util.Arrs = new Array;
TS_Util.AllSameCheck=function(obj,no)
{
var theTable = obj.parentNode.parentNode.parentNode;
var j = obj.parentNode.cellIndex;
TS_Util.ArrayManage(no,theTable.rows.length);
for(var i=0;i<theTable.rows.length;i++)
{
var objTextBox;
if (navigator.userAgent.indexOf('MSIE') > -1)
{
objTextBox = theTable.rows[i].cells[j].childNodes[0];
if(i > 1 && no == 2)
{
theTable.rows[i].cells[j].childNodes[2].disabled = obj.checked;
}
}
else
{
objTextBox = theTable.rows[i].cells[j].childNodes[1];
}
if(obj.checked)
TS_Util.Arrs[no * theTable.rows.length + i] = objTextBox.value;
if(i > 1)
{
// objTextBox.disabled = obj.checked;
if(obj.checked)
objTextBox.value = TS_Util.Arrs[no * theTable.rows.length + 1];
else
objTextBox.value = TS_Util.Arrs[no * theTable.rows.length + i];
}
}
}
TS_Util.ArrayManage=function(no, MaxLength)
{
if(TS_Util.Arrs.length <= no * MaxLength)
{
var startpos = TS_Util.Arrs.length;
for(var i=startpos;i<(no+1) * MaxLength;i++)
TS_Util.Arrs.push('');
}
}
TS_Util.AllSameValue=function(obj)
{
var theTable = obj.parentNode.parentNode.parentNode;
var j = obj.parentNode.cellIndex;
var objCheckBox = theTable.rows[0].cells[j].childNodes[1];
for(var i=2;i<theTable.rows.length;i++)
{
var objTextBox;
if (navigator.userAgent.indexOf('MSIE') > -1)
objTextBox = theTable.rows[i].cells[j].childNodes[0];
else
objTextBox = theTable.rows[i].cells[j].childNodes[1];
if(objCheckBox.checked)
objTextBox.value = obj.value;
}
}
</script>
aspx页面的片段,datagrid中的一个模板列
<asp:TemplateColumn HeaderText="DIC_NAME" SortExpression="DIC_NAME">
<HeaderTemplate>
字典项(<asp:CheckBox ID="CheckBox1" runat="server" Text="所有行相同"/>)
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DIC_NAME") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
注意 表头的控件:CheckBox1 编辑的文本框:TextBox1
C#代码把脚本和html上的服务器控件关联起来:
protected void GridView1_RowDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
CheckBox CheckBox1 = (CheckBox)e.Item.FindControl("CheckBox1");
CheckBox1.Attributes.Add("OnClick", "TS_Util.AllSameCheck(this,0);");
}
else if (e.Item.ItemType == ListItemType.Item && e.Item.ItemIndex == 0)
{
TextBox TextBox1 = (TextBox)e.Item.FindControl("TextBox1");
TextBox1.Attributes.Add("onkeyup", "TS_Util.AllSameValue(this);");
}
}
注意:CheckBox1.Attributes.Add(
"OnClick", "TS_Util.AllSameCheck(this,0);");
如果想象前面的截图那样有多个列需要类似的功能,则为
TS_Util.AllSameCheck(this,1);") 这个数字是从0开始,递增的,不能跳数。
其它值得注意的地方,如果您使用的不是文本框,比如象我一样使用一个日期控件,您可能不能使用Onkeyup事件。必须额外在对第一行数据中相应的控件中使用
TextBox3.Attributes.Add("onpropertychange", "TS_Util.AllSameValue(this);");
对,就是要 onpropertychange 这个事件,呵呵
还有前面给出的脚本代码中注意这句
if(i > 1 && no == 2)
{
theTable.rows[i].cells[j].childNodes[2].disabled = obj.checked;
}
这个也是为了日期控件特意加的代码。因为就算你把日期的文本框设置成不能用的,但右边的图片还是可以点,可以弹出日期选择的。因此加了一句。不过大家每个公司使用的日期控件是五花八门的,或许有些人的控件就不需要这样处理。大家自己微调吧。
http://piedpiper.cnblogs.com
本文是偶原创,想转贴的朋友劳驾写明转贴二字。呵呵。如果大家使用中有什么疑问,欢迎一起交流。偶对javascript脚本没什么研究,估计写的比较烂,也请大家一起改进。改进后,请到这里教教偶,偶这算是抛砖引玉啦。
分享到:
相关推荐
### 命令行设置IE代理服务器以实现多机同时上网 #### 背景介绍 在局域网环境中,通常会有这样的需求:通过一台计算机(我们称为主机)作为代理服务器,帮助局域网内的其他计算机(客户端)访问互联网。这种场景下,...
IE代理服务器设置被禁用问题 收藏 有时管理员为了限制上网,将IE代理服务器设置禁用了,我们只要通过组策略将其启用即可。 单击“开始->运行”,输入“gpedit.msc”打开组策略: 对于IE5.0/6.0 ,依次...
根据给定的信息,本文将详细解析如何使用 Delphi 实现 IE 代理服务器设置程序的关键技术点,包括 Delphi 的基本概念、与 IE 代理相关的 API 调用、注册表操作以及具体的代码实现。 ### 一、Delphi 基础 Delphi 是...
在Java编程中,有时我们需要模拟用户的网络环境,例如设置IE(Internet Explorer)浏览器的代理以进行自动化测试或者数据抓取。这个"java操作IE代理"的主题涉及到如何在Java程序中控制IE的网络代理设置,这通常需要...
使用网络不同,所以总要从新设置IE代理服务器,不用时再清除。每次都要在IE里点来点去的,非常麻烦。 <br>于是萌发了想制作清除IE代理服务器设置的软件。算上上网查资料的时间,共用了3、4个小时,小软件诞生了。...
在VB(Visual Basic)编程中,有时候我们需要对Internet Explorer(IE)浏览器的代理服务器进行设置,以便通过特定的代理服务器访问网络。这个过程涉及到Windows API(应用程序接口)的调用和注册表的操作。下面我们...
VB 修改 代理 服务器地址 端口 IE 用VB来实现代理服务器的源码 ...快速设置或修改IE代理服务器地址和端口 设置代理服务器、修改代理服务器 在windows 7和vb 5.0上运行通过,里面含有编译后的exe运行程序
以上步骤实现了对系统IE代理的配置,但需要注意的是,这种方法直接修改了系统的注册表设置,因此可能会导致全局代理的变化,适用于需要全局应用代理的情况。 ### 使用代理访问网页 #### 创建WebProxy对象 为了...
Edit:hua.peng Date:2015/11/19 1.用于开启和设置IE浏览器中的局域网(LAN)代理服务器。
设置IE代理服务器1.0.rar 设置IE代理服务器1.0.rar 设置IE代理服务器1.0.rar 设置IE代理服务器1.0.rar 设置IE代理服务器1.0.rar 设置IE代理服务器1.0.rar
在“易语言设置IE代理”这个主题中,我们主要关注的是如何使用易语言来操作Internet Explorer(IE)浏览器的网络代理设置。 在互联网访问中,代理服务器起到一个中介的作用,它接收用户的请求并转发给目标服务器,...
退出一些代理软件的时候,如果没有正常清空ie代理设置,就会导致浏览器上不了网,使用这个小工具,就可以解决这个问题。
标题中的“几个快速设置ie代理的小软件”表明这个压缩包可能包含了一些小巧的工具,用于便捷地配置Internet Explorer(IE)浏览器的代理设置。在Windows操作系统中,IE是默认的网页浏览器,用户有时需要通过代理...
**IE代理服务器设置详解** ...总之,正确设置IE的代理服务器是实现网络访问控制和提升网络安全的重要手段,但同时也需要根据实际情况和需求谨慎操作。理解并掌握这些设置,能帮助用户更好地管理和使用自己的网络环境。
### Socket 实现 HTTP 代理服务器的关键知识点 #### 一、HTTP 代理服务器的基本概念与工作原理 HTTP 代理服务器是一种中介服务,它位于客户端(如浏览器)与目标服务器之间,帮助客户端发送请求到目标服务器,并将...
在这个"易语言源码设置IE代理服务器1.0.7z"压缩包中,我们主要探讨的是如何使用易语言来编写程序,实现对Internet Explorer(IE)浏览器的代理服务器设置功能。 首先,让我们理解什么是代理服务器。代理服务器是...
此时,如果用户希望使用更现代化且兼容性更好的浏览器(如Chrome或Firefox)进行录制,则可以通过设置代理来实现这一目的。 #### 四、如何配置LR11使用代理录制? 1. **安装代理服务器**: - 如果还没有安装代理...
IE设置代理服务器(127.0.0.1),关闭时取消代理
标题中的“设置IE代理的小程序”指的是一个专为Internet Explorer(IE)浏览器设计的应用程序,它的主要功能是帮助用户快速、便捷地配置和管理代理设置。对于那些在工作和私人生活中需要频繁切换代理服务器的人来说...