我使用LINQDataSource来填充大学的GridView。
每个大学都有一个关联的州,它位于另一个表中,并由外键(StateID)关联。
我在GridView中有一个TemplateField,所以当你正常查看它时会显示来自State表的StateName,当你编辑它时会显示一个填充了State表中所有内容的DDL。
<asp:TemplateField ConvertEmptyStringToNull="False" HeaderText="State" SortExpression="State">
<EditItemTemplate>
<asp:DropDownList ID="DropDownListStateEdit" runat="server"
DataSourceID="LinqDataSourceStates" DataTextField="StateName" DataValueField="StateID"
SelectedValue='<%#Eval("StateID") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("State.StateName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
如果我调试,在RowUpdating内部,GridViewUpdateEventArgs.NewValues甚至没有State的密钥。
问题:如何让我的gridview知道我希望它更新此列?所有的BoundFields似乎都有用......
答案 0 :(得分:2)
在EditItemTemplate中,您应该使用#Bind(“StateID”)而不是#Eval(“StateID”)。