仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 696|回复: 9
打印 上一主题 下一主题

[学习教程] ASP网站制作之代码剖析-DataGrid完成自增列、单选、...

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 23:12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。datagrid上一次,我们为这个DataGrid完成了增加、删除、修正、分页、静态修正内容等功效,明天再来剖析一下怎样为之增加自增列、单选、多选的功效。
起首看一下必要在前次的基本上增添的代码:
(1)完成自增列
只必要在前台增加一个模板列,绑定ItemIndex+1就能够了
<asp:TemplateColumnHeaderText="选择">
<ItemTemplate>
<%#Container.ItemIndex+1%>
</ItemTemplate>
</asp:TemplateColumn>
(2)完成单选
在下面的基本上,为这个列加一个radio
<asp:TemplateColumnHeaderText="选择">
<ItemTemplate>
<%#Container.ItemIndex+1%>
<inputtype=radioname="rad"value=<%#Container.ItemIndex+1%>>
</ItemTemplate>
</asp:TemplateColumn>
radio的值也就是自增的1-PageSize
再创立一个按钮(名字叫单选),为之增加以下代码
this.Label1.Text="选择的行号:"+Request.Form["rad"].ToString();
如许复杂的几步固然完成了显现选择的行号,可是在按下按钮今后,radio的选择是不克不及倍保存的,缘故原由是这个radio不是runat=server的,我们必要再为这个页面安排一个埋没域(如runat=server)用来在点击按钮的时分保留选择的radio,在前台增加<inputtype="hidden"id="rd"runat="server"name="rd">(注重,不要把这个增加到DataGrid中),然后再在方才谁人按钮中增加rd.Value=Request.Form["rad"].ToString();(假如vs.net没无为这个HtmlInputHidden声名的话你本人加上protectedSystem.Web.UI.HtmlControls.HtmlInputHiddenrd;)。到如今地位还没有完成,固然HtmlInputHidden内里已保留了选择的行号,可是还必要在页面Load的时分让这个radio为选择形态,修正Page_Load()为
privatevoidPage_Load(objectsender,System.EventArgse)
{
stringjs="";
js+="<script>
";
js+="functionld(){
";
js+="for(i=0;i<document.getElementsByName(rad).length;i++)
";
js+="if(document.getElementsByName(rad)[i].value==";
js+="document.getElementById("+this.rd.ClientID+").value)";
js+="document.getElementsByName(rad)[i].checked=true
";
js+="}
";
js+="window.onload=ld
";
js+="</script>
";
this.RegisterStartupScript("js",js);
if(!IsPostBack)
{
SetBind();
}
}
上面剖析一下以上的这段代码:

问:为何不把代码放在if(!IsPostBack)中呢?
答:放不放还必要明白if(!IsPostBack)的意义(详细见http://blog.csdn.net/lovecherry/archive/2005/02/25/301441.aspx中的申明),实在切实的说应当把这段代码放到if(!IsPostBack){}else{放到这里}来,由于第一次加载页面的时分,埋没域内里是不成能有器材的(第一次加载页面你都选择而且点击按钮提交,怎样会有器材呢?)

问:
是甚么器材?
答:这个是换行,放不放对代码运转没有影响,可是假如放了换行的话,在客户真个出现能够加倍明晰

问:为何取rd的值要用document.getElementById("+this.rd.ClientID+").value不必document.getElementById(rd).value呢?
答:实在在这里你能够后者,可是要晓得一点,就是rd是服务真个控件,在某些情形下,id在客户真个出现不是在aspx中你指定的id了,而是控件.ClientID,好比在DataGrid中安排的一些服务器端控件,检察一下源代码能够看到id是相似DataGrid1__ctl5_Hyperlink1而不是你指定的id了

问:这里为何不必RegisterClientScriptBlock呢?
答:在这里,这也是无所谓的你可使用RegisterClientScriptBlock,由于这段js是自运转的(js+="window.onload=ld
";这句)的,以是不论在form的入手下手或是停止出现都不会影响到了局

(3)完成多选
起首在前台到场以下的代码(增加一列)
<asp:TemplateColumn>
<ItemTemplate>
<inputtype="hidden"id="SelectedID"runat="server"
value=<%#Container.ItemIndex%>NAME="SelectedID"/>
<asp:CheckBoxID="chkExport"Runat="server"/>
</ItemTemplate>
</asp:TemplateColumn>
为页面到场一个按钮(名字叫多选),为之增加以下代码
foreach(DataGridItemdiinthis.DataGrid1.Items)
{
if(((CheckBox)di.FindControl("chkExport")).Checked==true)
{
this.Label1.Text+=this.DataGrid1.DataKeys[int.Parse(((HtmlInputHidden)di.FindControl("SelectedID")).Value)]+"<br>";
}
}
点击了这个按钮就在label的地位显现了一切选择的项目对应的数据表主键的值,能够使用这个值举行一些数据库的操纵

你能够再增加两个按钮,一个叫选择一切,一个叫作废一切选择,为之分离增加以下代码
foreach(DataGridItemdiinthis.DataGrid1.Items)
{
((CheckBox)di.FindControl("chkExport")).Checked=true;
}

foreach(DataGridItemdiinthis.DataGrid1.Items)
{
((CheckBox)di.FindControl("chkExport")).Checked=false;
}

上面剖析以上下面的代码:

问:选择一切和作废一切选择的按钮是提交到服务器的,可否不提交完成?
答:起首明白,模板列中的checkbox是runat=server的,下面说了,在客户真个出现id是相似DataGrid1__ctl9_chkExport如许的,以是在客户端js取的时分我们只能经由过程控件.ClientID来取,假如在Page_Load的时分来取的话是取不到的,由于checkbox是放在DataGrid模板列中的,在Page_Load的时分DataGrid还没有Created。办理举措就是同下面单选的一样,一致利用一个server真个埋没域来保留多选的项目,然后交换模板列中的<asp:CheckBox>为html的checkbox,在选择时分来变动埋没域中的值(经由过程js,以是不会提交页面),一样在点击多选按钮的时分,经由过程读取埋没域中的值来失掉选择的项目,如许实际上是一个代码以服务端为主到客户端为主的一个变化,在有的时分服务端和客户真个交互经由过程埋没域长短常便利的。在后续文章中会具体给出跨页面多选,同时也完成了客户端选择一切和作废一切选择的例子。

</p>SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。
简单生活 该用户已被删除
沙发
发表于 2015-1-20 08:11:26 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-25 16:10:35 来自手机 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
深爱那片海 该用户已被删除
地板
发表于 2015-1-29 19:23:20 | 只看该作者
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
爱飞 该用户已被删除
5#
发表于 2015-2-6 03:30:20 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
莫相离 该用户已被删除
6#
发表于 2015-2-15 09:55:11 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
小魔女 该用户已被删除
7#
发表于 2015-3-4 11:25:14 | 只看该作者
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-11 18:56:12 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
只想知道 该用户已被删除
9#
发表于 2015-3-19 08:10:32 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
柔情似水 该用户已被删除
10#
发表于 2015-3-27 15:10:03 | 只看该作者
掌握asp的特性而且一定要知道为什么。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表