GridView更新功能不起作用 - 不更新记录

时间:2012-09-07 08:23:53

标签: c# asp.net .net sql-server gridview

我创建了一个Web应用程序并包含一个GridView,它将从表testtable中检索记录。

代码如下:

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                    <asp:BoundField DataField="product_no" HeaderText="product_no" 
                        InsertVisible="False" ReadOnly="True" SortExpression="product_no" />
                    <asp:BoundField DataField="product_name" HeaderText="product_name" 
                        SortExpression="product_name" />
                    <asp:BoundField DataField="price" HeaderText="price" SortExpression="price" />
                    <asp:BoundField DataField="expire_date" HeaderText="expire_date" 
                        SortExpression="expire_date" />
                    <asp:BoundField DataField="expire_time" HeaderText="expire_time" 
                        SortExpression="expire_time" />
                </Columns>
            </asp:GridView>

            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:testbaseConnectionString %>" 
                DeleteCommand="DELETE FROM testtable WHERE (product_no = @product_no)" 
                InsertCommand="INSERT INTO testtable(product_name, price, expire_date, expire_time) VALUES (@product_name, @price, @expire_date, @expire_time)" 
                SelectCommand="SELECT testtable.* FROM testtable" 
                UpdateCommand="UPDATE testtable SET product_name = @product_name, price = @price, expire_date = @expire_date, expire_time = @expire_time WHERE (product_no = @product_no)">
                <DeleteParameters>
                    <asp:Parameter Name="product_no" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="product_name" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="product_name" />
                    <asp:Parameter Name="price" />
                    <asp:Parameter Name="expire_date" />
                    <asp:Parameter Name="expire_time" />
                    <asp:Parameter Name="product_no" />
                </UpdateParameters>
            </asp:SqlDataSource>

但是,当我单击GridView的特定记录的Edit链接并进行一些更改时,我单击Update链接但是没有反映更改,似乎它没有更新进入表格。 (Edit链接看起来与下图中的显示完全相同)

enter image description here

我能错过什么?

3 个答案:

答案 0 :(得分:0)

查看这些链接希望它可以帮助您

答案 1 :(得分:0)

GridView控件中没有“DataKeyNames”。

修改gridView标记,如下所示:

 <asp:GridView DataKeyNames="product_no"   ... />

答案 2 :(得分:0)

尝试更改这两个

<asp:BoundField DataField="product_no" HeaderText="product_no" 
                    InsertVisible="False" ReadOnly="True" SortExpression="product_no" />
<asp:BoundField DataField="product_name" HeaderText="product_name" 
                    SortExpression="product_name" />

用这个

<asp:TemplateField HeaderText="product_name" SortExpression="product_name">
    <ItemTemplate>
        <asp:HiddenField id="hfProduct_No" runat="server" value='<%# Bind("product_no") %>' />
        <asp:Label id="lblProduct_name" runat="server"  Text ='<%#Bind("product_name")%>' ></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:HiddenField id="hfProduct_No" runat="server" value='<%# Bind("product_no") %>' />
        <asp:TextBox id="txtProduct_name" runat="server"  Text ='<%#Bind("product_name")%>' ></asp:TextBox>
    </EditItemTemplate>    
</asp:TemplateField>