NamingContainer
使用時機: 譬如 GridView裏的TemplateField 放了1個TextBox,1個CheckBox(設定AutoPostBack = "true")
畫面上的GridView假設有5筆資料,當其中一筆的CheckBox的事件CheckedChanged觸發時,可以藉由事件的參數 object sender,找到他是畫面上的哪一列,及該列的其它控制項。
aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="PageDefault" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false" OnRowDataBound="gridView_RowDataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
ID:
</HeaderTemplate>
<ItemTemplate>
<asp:Literal ID="litID" runat="server" Text='<%#Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
姓名:
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
在職:
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkWorking" runat="server" AutoPostBack="true" OnCheckedChanged="chkWorking_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
aspx.cs
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class PageDefault : System.Web.UI.Page {
private ArrayList EmployeeList;
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack == false) {
EmployeeList = new ArrayList();
EmployeeList.Add(new Employee(1, "john", true));
EmployeeList.Add(new Employee(2, "may", false));
EmployeeList.Add(new Employee(3, "momo", true));
EmployeeList.Add(new Employee(4, "dennis", false));
EmployeeList.Add(new Employee(5, "esp", true));
gridView.DataSource = EmployeeList;
gridView.DataBind();
}
}
protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.DataRow) {
Employee employee = (Employee)e.Row.DataItem;
CheckBox chkWorking = (CheckBox)e.Row.FindControl("chkWorking");
chkWorking.Checked = employee.Working;
}
}
protected void chkWorking_CheckedChanged(object sender, EventArgs e) {
CheckBox chkWorking = (CheckBox)sender;
GridViewRow row = chkWorking.NamingContainer as GridViewRow;
TextBox txtName = row.FindControl("txtName") as TextBox;
Literal litID = row.FindControl("litID") as Literal;
string action = chkWorking.Checked ? "勾選" : "取消";
Response.Write(String.Format("{0}: {1}({2}) <br />", action, txtName.Text, litID.Text));
}
public class Employee {
private int m_id;
private string m_name;
private bool m_working;
public Employee(int id, string name, bool working) {
this.ID = id;
this.Name = name;
this.Working = working;
}
public int ID {
get { return m_id; }
set { m_id = value; }
}
public string Name {
get { return m_name; }
set { m_name = value; }
}
public bool Working {
get { return m_working; }
set { m_working = value; }
}
}
}
留言列表