事件回升----怎麼知道哪個事件激發窗體重載
2010-04-12 10:03
211 查看
最近在公司做個教育系統(公司人員培訓系統),碰到了一個這樣的問題就是開課時,上課課程的安排。需要很sap系統數據聯繫。當然那個是用webService開發的。碰的問題是:動態生成用戶控件,需要知道開幾次課,包括日期,開始時間,和結束時間。其中日期就是用戶控件。我們在做修改頁面時就用動態的生成和修改。當然我們都知道網頁是沒有保存狀態的,每次動態生成的控件都要在頁面加載的時候生成,所以在頁面加載時就要生成控件。那大家應該怎麼知道用戶是刪除還是增加呢,因為按鈕事件,也會發生Page_Load事件,而且在按鈕處理代碼之前處理。就是說生成的控件要先確定。我開始就是安這個思路來做的。當然這樣做就要知道是誰激發網頁重載的。再在Page_Load中確定是刪除還是添加。當然這裡就需要知道是誰???瘋狂的找了些資料!終於解決了問題。代碼如下:
所以在 Page_Load就可以這樣處理了,主要代碼如下:
當然上面的只是我開始的思路。其實在項目中我採用了另外一中新技術,而且處理更加簡單明了。他就是Ajax。我記下這篇文章只是覺得回升事件中能夠知道誰觸發的,真的很有用。同時也提醒了自己多學習新技術!
private string getPostBackControlName() { Control control = null; string ctrlname = Page.Request.Params["__EVENTTARGET"]; if (ctrlname != null && ctrlname != String.Empty) { control = Page.FindControl(ctrlname); } else { Control c; foreach (string ctl in Page.Request.Form) { if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) { c = Page.FindControl(ctl.Substring(0, ctl.Length - 2)); } else { c = Page.FindControl(ctl); } if (c is System.Web.UI.WebControls.Button || c is System.Web.UI.WebControls.ImageButton) { control = c; break; } } } if (control != null) return control.ID; else return string.Empty; }
所以在 Page_Load就可以這樣處理了,主要代碼如下:
protected void Page_Load(object sender, EventArgs e) { if ("lbtnShow" == getPostBackControlName()) { int rows; DataTable dtTime; dtTime = (DataTable)ViewState["42dtTIME"]; if (null != dtTime) { DataRow[] drows; string zcrNUM = (ViewState["42zcrNum"]).ToString(); drows = dtTime.Select("ZCRNUM='" + zcrNUM + "'"); rows = drows.Length; txtRows.Text = rows.ToString(); for (int i = 0; i < rows; i++) { LoadUserContorl(i);//動態生成控件函數 } } } else { if ("lbtnAddRow" == getPostBackControlName()) { int rows = Convert.ToInt32(txtRows.Text) + 1; txtRows.Text = rows.ToString(); for (int i = 0; i < rows; i++) { LoadUserContorl(i); } } else { if ("lbtnCutRow" == getPostBackControlName()) { int rows = Convert.ToInt32(txtRows.Text) ; if (rows > 0) rows = rows - 1; txtRows.Text = rows.ToString(); for (int i = 0; i < rows; i++) { LoadUserContorl(i); } } else { int rows = Convert.ToInt32(txtRows.Text); for (int i = 0; i < rows; i++) { LoadUserContorl(i); } } } } }
當然上面的只是我開始的思路。其實在項目中我採用了另外一中新技術,而且處理更加簡單明了。他就是Ajax。我記下這篇文章只是覺得回升事件中能夠知道誰觸發的,真的很有用。同時也提醒了自己多學習新技術!
相关文章推荐
- [你必须知道的异步编程]——基于事件的异步编程模式
- 孙杨国歌门事件掀中日骂战 日本国歌有多难听你知道吗?
- 【面向对象语言系列】关于 C# 事件处理,你需要知道的事
- QT 事件类型1000个你知道多少?
- 人工智能的十个里程碑事件,你知道几个?
- 你所知道的DOM事件
- 【面向对象语言系列】关于 C++ 事件处理,你需要知道的事
- 国家网络安全事件应急预案,你需要知道哪些重点
- 那些年朋友劝,该知道的ASP.NET - 自定义控件处理页面事件(控件与页面数据交互)的方法
- application19事件 20多少步骤 具体20多少只有微软知道!!!
- 孙杨国歌门事件掀中日骂战 日本国歌有多难听你知道吗?
- 孙杨国歌门事件掀中日骂战 日本国歌有多难听你知道吗?
- 【脚本语言系列】关于 Python 事件处理,你需要知道的事
- (论坛答疑点滴)DataGrid模板列中控件的事件中怎么知道是哪行触发的事件?
- [你必须知道的异步编程]——基于事件的异步编程模式 推荐
- 【脚本语言系列】关于 JavaScript 事件处理,你需要知道的事
- 【面向对象语言系列】关于 Java 事件处理,你需要知道的事情
- 多个进程同时等待网络的连接事件,当这个事件发生时,这些进程被同时唤醒,我们知道进程被唤醒,需要进行内核重新调度,这样每个进程同时去响应这一个事件,而最终只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠或其他。
- 如何捕获只知道其名称的对话框窗口对象,并可模拟这个对话框中的某一按钮的单击事件
- [你必须知道的异步编程]——基于事件的异步编程模式