Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/1/30 1:57:51
让GridView有新增记录的功能_[Asp.Net教程]

让GridView有新增记录的功能_[Asp.Net教程]
在 ASP.NET 2.0 中,GridView 支持修改/删除记录,但却不支持新增记录的功能,大多数人建议用 FormView 来完成增加记录的功能,但是 FormView 和 GridView 不是同一个表格,所以无法在同一个页面的同一个表格中显示。如果故意将 FormView 或自己的一堆于用新增功能的控件使用普通的表格组装起来,那么会碰到一个很麻烦的问题,即两个表格的列宽如何协调一致,大多数情况下,大家在做表格的时候,表格中各列的宽度都是自动调整的,所以强行指定宽度在很多情况下并不适用。
通过实践,想出了一种办法,主要步骤如下所示:
1) 在 GridView 的 EmptyDataView 中,放置一个普通的Html Table,以便在无数据时依旧显示表头,假设 ID 为 tbHeader,为下面用于新增功能的 Form 的各个控件提供说明;

2) 在 GridView 下面,放置一个普通的 HTML 表格,列数和 GridView保持一致,只有一行,内部放入用于新增功能的各个控件,假设 ID 为 tbForm

3) 在客户端中加入脚本,在页面显示到客户端时,利用 Javascript 将两个表格强行合并到一起,这样就会在 GridView 的最下面多出一行,其中有输入控件和“添加”链接(按钮),主要代码如下:



function MergeTable(source,dest){ var row; var cell; var sourceTb = document.all(source); var destTb = document.all(dest); for (var i=0; i=0; i--) { sourceTb.deleteRow(i) }} 注意:要根据表格中是否具有数据来合并不同的表格,如果没有数据,要合并 EmptyDataView 中的 Html Table (即 tbHeader)与用于新增的表格(tbForm),如果有数据,则要合并 GridView 本身(可以用 GridView.ClientID来获取其客户端 ID)和用于新增加的表格(tbForm)。简单的做法是检查页面中有没有 tbHeader 以确定表格中是否包含数据,代码如下所示:

function ChangeTableLayout()
{
if(document.all(’tbHeader’) == null)
MergeTable(’tbForm’,’<%=myGridView.ClientID %>’);
else
MergeTable(’tbForm’,’tbHeader’);
}

4) 如果是 AJAX 环境,上述脚本有可能不被执行,可以调用 Sys.Application.load.add ( JavaScriptFunction) 来强制执行脚本,来合并表格,主要代码如下:

scriptmanager myScriptManager = ScriptManager.GetCurrent(Page);
if (myScriptManager.IsInPartialRenderingMode)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowFullTable1", "ChangeTableLayout();\n", true);
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowFullTable2", "Sys.Application.load.add (ChangeTableLayout);\n", true);
}

注:上述代码中的 ChangeTableLayout 为客户端脚本函数的名称,其中调用第3步骤中的代码,上述代码在 Atlas 中通过,在 ASP.NET AJAX Beta 上尚末测试。





If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759