В данный момент я пытаюсь научиться использовать базовые элементы управления видом сетки для отображения моих данных.
Для начала я попытался сделать все через страницу 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 в таблицу?