Обновление .NET GridView не отправляет идентификатор пользователя в SQL-запрос - PullRequest
2 голосов
/ 19 ноября 2010

В данный момент я пытаюсь научиться использовать базовые элементы управления видом сетки для отображения моих данных.

Для начала я попытался сделать все через страницу aspx, чтобы попытаться сделать вещи проще для себя.

Пока все отлично работает, но у меня проблема с использованием запроса на обновление.

Мой желаемый результат - простая таблица из 2 столбцов, в которой будет отображаться имя пользователя, а затем кнопка редактирования.

Проблема в том, что если я не включу идентификатор пользователя в столбцы, запрос ничего не обновит.

Это мой код SqlDataSource:

<asp:SqlDataSource
    ID="sqlDataSource"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:conn %>"
    SelectCommand="SELECT UserID, Name FROM tblUsers;"
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @UserID">
    <UpdateParameters>
        <asp:Parameter Name="Name" />
        <asp:Parameter Name="UserID" />
    </UpdateParameters>
</asp:SqlDataSource>

А это мой GridView:

<asp:GridView
    ID="Clients"
    DataSourceID="sqlDataSource"
    runat="server"
    AllowPaging="true"
    AllowSorting="true"
    PageSize="25"
    AutoGenerateColumns="False"
    DataKeyNames="UserID">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Users Name" SortExpression="Name" />
        <asp:CommandField EditText="Edit" ShowEditButton="true" />
    </Columns>
</asp:GridView>

Когда я перехожу на страницу и нажимаю кнопку «Изменить», поле «Имя» изменяется на текстовое поле, и я могу выбрать либо обновить, либо отменить, как ожидается.

Но с приведенным выше кодом, когда я нажимаю обновить, он просто снова отображает обычную таблицу без изменений данных, потому что SQL просто не получает никакого идентификатора пользователя.

Однако, если я добавлю <asp:BoundField DataField="UserID" HeaderText="Users ID" SortExpression="UserID" /> к <Columns>, это сработает.

Можно ли как-нибудь сделать это без добавления столбца UserID в таблицу?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Вы можете использовать OldValuesParameterFormatString:

<asp:SqlDataSource
    ID="sqlDataSource"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:conn %>"
    OldValuesParameterFormatString="original_{0}"
    SelectCommand="SELECT UserID, Name FROM tblUsers;"
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @original_UserID">
    <UpdateParameters>
        <asp:Parameter Name="Name" />
        <asp:Parameter Name="original_UserID" />
    </UpdateParameters>
</asp:SqlDataSource>
1 голос
/ 19 ноября 2010

Добавьте столбец и установите Visible в False.

<asp:BoundField DataField="UserID" Visible="False" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...