三張圖展示完整交互流程:
<asp:TemplateField HeaderText="所屬專業">
<ItemTemplate>
<%# Eval("MajorName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlMajor" runat="server"
DataSourceID="dsMajors" DataTextField="Name" DataValueField="Id"
SelectedValue='<%# Bind("MajorId") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:SqlDataSource ID="dsMajors" runat="server"
ConnectionString="%$ ConnectionStrings:MainDB %"
SelectCommand="SELECT Id, Name FROM Majors WHERE IsActive=1">
</asp:SqlDataSource>
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {
DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlMajor");
e.NewValues["MajorId"] = ddl.SelectedValue;
e.NewValues["MajorName"] = ddl.SelectedItem.Text;
}
SelectedValue 必須用 Bind 而非 EvalRowDataBound 中處理 MajorId 為 NULL 的情況