使用GridView做出列选择效果(获取动态生成的控件.鼠标点选GridView.Ajax控件)
先看效果圖:
其實就是個一覽定制的效果,只不過由于項目的需要,需要使用GridView進行設計,至于為什么不直接使用Html+JQuery,還是因為項目需要,不然維護起來會很麻煩,在制作的過程中會遇到以下幾點,記錄一下:
1.使用鼠標選擇GridView行
要想實現GridView相應鼠標事件,明顯是需要Js支持的,為了操作簡便和提高可維護行,在這里使用ASP.net的ScriptManager在頁面繪制的時候把Js事件給加進去:
代碼:
控件繪制時加入Js事件處理 foreach (GridViewRow row in this.gvAllProcessItem.Rows){
if (row.RowType == DataControlRowType.DataRow)
{
//對整行添加Js事件onclick
//事件被激發后自動回傳,回傳的參數為需要激發事件的GridView和事件發生的行的ClientID
row.Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvAllProcessItem, "Select$" + row.RowIndex.ToString(), true);
row.Attributes["style"] = "cursor:pointer";
}
}
foreach (GridViewRow row in this.gvSelectedProcess.Rows)
{
//不能對整行添加事件
//如果對整行添加事件,則下拉列表和Textbox的onclick也會被不會并引發回傳
if (row.RowType == DataControlRowType.DataRow)
{
row.Cells[0].Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvSelectedProcess, "Select$" + row.RowIndex.ToString(), true);
row.Cells[1].Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvSelectedProcess, "Select$" + row.RowIndex.ToString(), true);
row.Attributes["style"] = "cursor:pointer";
}
}
//調用基類繼續進行頁面的繪制
base.Render(writer);
通過上面的處理,在用戶使用鼠標點擊對應的單元格或行后回激發相應GridView的SelectIndexChange事件,在捕獲到該事件后只需進行
protected void gvAllProcessItem_SelectedIndexChanging(object sender, GridViewSelectEventArgs e){
gvAllProcessItem.SelectedIndex = e.NewSelectedIndex;
//setGvAllProcessItem();
}
2.在GridView中使用代碼動態繪制控件
如例子所示,在用戶選擇特定的下拉列表值后,會在后面出現Textbox,這些Textbox是使用代碼在行綁定上繪制上去的,這里牽涉到動態繪制的代碼的獲取問題,在GridView中繪制的控件在頁面回傳之后會丟失,需要重新進行繪制,所以在頁面回傳之后是無法獲得這些動態繪制的控件的,想要取得用戶在控件中輸入的值需要使用Request.Form來獲得表單數據,瀏覽器在回傳表單數據時使用的ID是由Asp.net轉成Html之后生成的clientId ,獲得ClientID的方法是:如果不是嵌套控件,也就是說在使用服務器控件時ID不能重復的控件,可以直接使用ID.ClientID 來獲取,如果是可以嵌套的控件,如:GridView行里面的控件,則其對應的ClientID是和行有關的需要首先獲取行的ClientID,具體方法是:gvRow.UniqueID + "$"+ID;即可獲得該ID對應的ClientID,
由上可見還是多用HTML控件吧.....
3.UpDatePanel控件
其實很多人都看的出,如果不用Ajax,只用上面的方法,頁面早就被刷的受不了了,使用Ajax的時候個人傾向于使用JQuery手工傳遞Ajax信息,感覺這樣比較靈活,便于掌控,同樣是由于項目維護的原因....還是使用UpDatePanel...第一次使用這個東西,發現微軟確實把什么都弄的很簡單,只需要把想要異步回傳的控件放在UpdatePanel中里面就好了,在使用之前需要加入<ScriptManager>控件,但是使用這些控件運行時候會大量報錯,所以一般需要注意一下幾點:
1.<ScriptManager>最好直接放在<Form>的聲明下面
2.<system.webServer>下的<handlers>里面需要配置上:
View Code <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/><add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
3.如果還不行,發布的時候記得把Debug給關掉
轉載于:https://www.cnblogs.com/wk1234/archive/2011/12/16/2289242.html
總結
以上是生活随笔為你收集整理的使用GridView做出列选择效果(获取动态生成的控件.鼠标点选GridView.Ajax控件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何判断自己的WP7 SDK版本
- 下一篇: Unix原理与应用学习笔记----第五章