您的位置:首页 > 其它

事件回升----怎麼知道哪個事件激發窗體重載

2010-04-12 10:03 211 查看
最近在公司做個教育系統(公司人員培訓系統),碰到了一個這樣的問題就是開課時,上課課程的安排。需要很sap系統數據聯繫。當然那個是用webService開發的。碰的問題是:動態生成用戶控件,需要知道開幾次課,包括日期,開始時間,和結束時間。其中日期就是用戶控件。我們在做修改頁面時就用動態的生成和修改。當然我們都知道網頁是沒有保存狀態的,每次動態生成的控件都要在頁面加載的時候生成,所以在頁面加載時就要生成控件。那大家應該怎麼知道用戶是刪除還是增加呢,因為按鈕事件,也會發生Page_Load事件,而且在按鈕處理代碼之前處理。就是說生成的控件要先確定。我開始就是安這個思路來做的。當然這樣做就要知道是誰激發網頁重載的。再在Page_Load中確定是刪除還是添加。當然這裡就需要知道是誰???瘋狂的找了些資料!終於解決了問題。代碼如下:

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。我記下這篇文章只是覺得回升事件中能夠知道誰觸發的,真的很有用。同時也提醒了自己多學習新技術!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐