GridView控件在更新时找不到ID

时间:2018-06-24 03:13:58

标签: sql asp.net sql-server datagridview

我正在编写以下代码来更新SQL Server。我收到以下错误消息:

  

'-'附近的语法不正确。必须声明标量变量“ @id”。   说明:在执行期间发生未处理的异常   当前的Web请求。请查看堆栈跟踪以获取更多信息   有关错误及其在代码中起源的信息。

     

异常详细信息:System.Data.SqlClient.SqlException:不正确   '-'附近的语法。必须声明标量变量“ @id”。

     

源错误:

     

在执行过程中生成了未处理的异常   当前的Web请求。有关原产地和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈跟踪:

     

[SqlException(0x80131904):'-'附近的语法不正确。必须声明   标量变量“ @id”。]

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="id" DataSourceID="SqlDataSource2" ForeColor="#333333" GridLines="None" AllowSorting="True">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id">
                <EditItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="E-mail" HeaderText="E-mail" SortExpression="E-mail" />
        </Columns>
        <EditRowStyle BackColor="#2461BF" />
        <FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <PagerStyle ForeColor="White" HorizontalAlign="Center" BackColor="#2461BF" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#F5F7FB" />
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
        <SortedDescendingCellStyle BackColor="#E9EBEF" />
        <SortedDescendingHeaderStyle BackColor="#4870BE" />
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:demoConnectionString4 %>" 
        SelectCommand="SELECT * FROM [de]" 
        UpdateCommand="UPDATE [de] SET [Name]=@Name, [E-mail]=@column1 WHERE [id]=@id">
        <UpdateParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="Name" Type="String"/>
            <asp:Parameter Name="column1" Type="String"/>
        </UpdateParameters>
    </asp:SqlDataSource>

1 个答案:

答案 0 :(得分:1)

错误发生在ID模板字段上,您在Label上使用了EditItemTemplate来显示ID,并且此标签并没有发回该ID sql更新。 asp:label不会呈现此处所需的输入字段。

要么删除TemplateField,然后将asp:BoundField用作其余字段,并在更新每行时自动创建输入字段,就可以将其设为read only text box(在EditImteTemplate上)因此可以发布ID。

这行是您需要重点关注和更改的:

<asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id">
    <EditItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>