|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。 |
|