問題代碼
protected void Button8_Click(object sender, EventArgs e) {
GridView gv = new GridView();
gv.DataSource = mf.select(s);
gv.DataBind();
// 結束:gv 未加入頁面控件樹,不會渲染輸出
}
解決方案
方法一:頁面預置 GridView 控件(推薦)
<!-- .aspx -->
<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="true" />
// .aspx.cs
protected void Button8_Click(object sender, EventArgs e) {
gvData.DataSource = mf.select(s);
gvData.DataBind();
}
方法二:動態創建並添加到容器
protected void Button8_Click(object sender, EventArgs e) {
GridView gv = new GridView();
gv.DataSource = mf.select(s);
gv.DataBind();
// 必須添加到某個已存在的容器控件中
this.form1.Controls.Add(gv); // 或 Panel1.Controls.Add(gv)
}
關鍵點
- 動態創建的控件**必須**加入 `Page.Controls` 或某個命名容器的 `Controls` 集合,才會參與生命周期並渲染輸出。
- 預置控件優勢:聲明式定義列樣式、分頁、排序,易於維護;動態創建適合完全不可預知列結構的場景。
- 綁定 `List` 時,`AutoGenerateColumns="true"` 會自動根據屬性生成列;若需自定義列,定義 `BoundField`/`TemplateField`。