使用LINQDataSource在GridView中不更新TemplateField

时间:2010-09-02 15:04:22

标签: c# asp.net linq gridview templatefield

我使用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似乎都有用......

1 个答案:

答案 0 :(得分:2)

在EditItemTemplate中,您应该使用#Bind(“StateID”)而不是#Eval(“StateID”)。