Элемент управления GridView не может найти идентификатор при обновлении - PullRequest
0 голосов
/ 24 июня 2018

Я пишу следующий код для обновления SQL Server.Я получил следующее сообщение об ошибке:

Неверный синтаксис рядом с '-'.Необходимо объявить скалярную переменную "@id".Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: неправильный синтаксис рядом с '-'.Необходимо объявить скалярную переменную "@id".

Ошибка источника:

При выполнении текущего веб-запроса было сгенерировано необработанное исключение.Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[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 голосов
/ 24 июня 2018

Ошибка в ID TemplateField, вы используете Label в EditItemTemplate для отображения идентификатора, и эта метка не отправляет обратно тот идентификатор , который необходим для обновления sql. asp:label не отображает поле ввода, которое необходимо здесь.

Либо удалите TemplateField и просто используйте в качестве остальных полей asp:BoundField, который автоматически создает поля ввода при обновлении каждой строки, либо задайте read only text box (на EditImteTemplate), чтобы можно было опубликовать идентификатор.

Это строки, которые вам нужно сфокусировать и изменить:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...