抓取GridView "编辑"模式下,TextBox修改后的数值
对应书本「上集」第十章(ASP.NET专题实务 / 松岗出版)
[C#] ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法
[C#] ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写、后置程序代码
这是昨天上课的补充讲义:
================================================================
请写在GridView的 RowUpdating事件里面
第一,转成样版(Template),透过 .FindControl()方法处理
GridView1.Rows[e.RowIndex].FindControl("子控件ID")
.FindControl()的范例太多了,因为太好用、太常用,请看 http://www.dotblogs.com.tw/mis2000lab/Tags/findcontrol/default.aspx
第二,不转成样版,请用 .Controls处理
GridView1.Rows[e.RowIndex].Cells[数字].Controls[0]
这方法比较不好操作,可以参阅以前的文章与范例:
上集 Ch.10 -- .Controls() / .Controls[]的补充范例 #1
上集 Ch.10 -- .Controls() / .Controls[]的补充范例 #2 -- 转成样版(Template)以后
第三,透过 RowUpdating事件里面的参数e
e.NewValues["域名"] -- 修改以后的「新资料」
另外有一个 e.OldValues["域名"] 其实就是「开放式并行存取」里面提到的观念 -- 修改以前的「旧数据」
[图解] SqlDataSource 开放式并行存取 (Optimistic Concurrency),以GridView为例
第四,传统的Request也能抓到。
首先,您必须透过 UniqueID属性抓到HTML网页(程序执行后的成果画面)上的控件编号(独一无二的编号)
[习题] Web控件 -- UniqueID属性 与 ID属性两者的差异(上集Ch. 3 补充范例)
有了这个编号,就能透过 Request来撷取,例如:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//----修改、更新
TextBox my_test_time = (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]; // 抓到「Text控件」。
//---- 您也可以透过下列作法,取得GridView "编辑模式"下的TextBox,修改 "之后"的数值。
Response.Write("第1个TextBox的 UniqueID" + my_test_time.UniqueID + "<hr>");
Response.Write(Request[my_test_time.UniqueID] + "<br>");
Response.End();
// 后续省略......
}