Gridview SqlDataSource;更新问题

时间:2011-06-24 13:06:39

标签: asp.net gridview .net-2.0

我正在尝试更新表单

UPDATE TableName 
   SET field1 = NewValue
   WHERE field1 = OldValue

但我不太确定如何使用GridView。

我有这个用于我的Gridview标记

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1"  AllowPaging="True" DataKeyNames="cftm_emp_name" PageSize="30">
    <Columns>
        <asp:CommandField ButtonType="Image" SelectImageUrl="~/Images/sel.jpg" ShowSelectButton="True" />
        <asp:BoundField DataField="cftm_emp_name" HeaderText="CF Team Member" SortExpression="cftm_emp_name" />
        <asp:CommandField ShowEditButton="True" />
    </Columns>
</asp:GridView>

,SqlDataSource看起来像这样

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT DISTINCT [cftm_emp_name] FROM [rpc_extra_cf_team_members] ORDER BY [cftm_emp_name]" OnUpdating="SqlDataSource1_Updating" UpdateCommand="UPDATE rpc_extra_cf_team_members SET cftm_emp_name = ? WHERE cftm_emp_name = ?">
            <UpdateParameters>
                <asp:Parameter Name="cftm_emp_name" Type="String" />
                <asp:ControlParameter ControlID="GridView1" Name="cftm_emp_name" PropertyName="SelectedValue" />
            </UpdateParameters>
        </asp:SqlDataSource>

编辑:

没有错误,但它只是不更新​​它。我在OnUpdating事件处理程序中设置了一个断点,我注意到这两个参数都设置为OldValue

如果有任何其他信息需要我知道,我将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

原因是您要更新名为 cftm_emp_name 的主键字段,在您的情况下,您将其用作 DataKeyNames =“cftm_emp_name”。我们用作GridView的DataKeyNames的表的字段充当表的主键。因此,在您的表中,“cftm_emp_name”是主键,您无法更新主键。尝试使用“cftm_emp_name”字段作为搜索条件的主键来更新表的其他字段。

例如,您可以使用更新查询,例如:

 UpdateCommand="UPDATE rpc_extra_cf_team_members SET cftm_emp_add = @cftm_emp_add WHERE cftm_emp_name = @cftm_emp_name"
<UpdateParameters>
  <asp:Parameter Name="cftm_emp_add" Type="String" />
  <asp:Parameter Name="cftm_emp_name" Type="String" />   
</UpdateParameters>

答案 1 :(得分:0)

将sqldatasource的datakeymember属性设置为表中的主键字段并尝试。希望它有所帮助