Как обновить базу данных Access из GridView в Visual Studio?

Я пытаюсь обновить базу данных доступа при использовании Grid View в Visual Studio 2010, но безуспешно. Позвольте мне попытаться объяснить, что у меня есть.

У меня есть база данных доступа с таблицей "tblConfirmedworkhours", в которой есть поля "dateworked" и "подтвердил". Я могу отобразить отфильтрованную таблицу на своей веб-странице со ссылками редактирования / обновления, но таблица не будет обновляться.

Вариант 1: я бы хотел (если это возможно) не нажимать на кнопки редактирования и обновления, просто отредактировать данные на экране (я думаю о чем-то похожем на непрерывную форму MS Access, а затем нажмите какую-нибудь кнопку сохранения (которая (если возможно, снова) запустит запрос на добавление, уже созданный и сохраненный в моей базе данных доступа "qryToHistory").

Вариант 2: используйте кнопки редактирования / обновления, чтобы изменить данные в таблице.

Вот мой текущий код:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
DataSourceID="AccessDataSource1"  Width="983px" 
    AutoGenerateDeleteButton="True" AutoGenerateEditButton="True">
<Columns>
   <asp:BoundField DataField="WorkHourID" Visible="false" 
        HeaderText="Timesheet ID" />
    <asp:BoundField DataField="EmpName" HeaderText="Employee" 
        SortExpression="EmpName" />
    <asp:BoundField DataField="dateworked" 
        HeaderText="Date" SortExpression="dateworked" ApplyFormatInEditMode="True">
    <ItemStyle HorizontalAlign="Center" />
    </asp:BoundField>
    <asp:CheckBoxField DataField="confirmed" HeaderText="Confirmed" 
        SortExpression="confirmed" Text="This is OK">
    <ItemStyle HorizontalAlign="Center" />
    </asp:CheckBoxField>
</Columns>
<EditRowStyle Width="500px" Wrap="True" />
<EmptyDataRowStyle Width="5000px" />
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
DataFile="~/PayrollDirect.accdb" 
SelectCommand="SELECT [WorkHourID], [EmpName], [dateworked], [confirmed] FROM [tblConfirmedworkhours] WHERE (([CompanyID] = ?) AND ([confirmed] = ?)) ORDER BY [dateworked]"
UpdateCommand="UPDATE tblConfirmedworkhours SET dateworked=dateworked, confirmed=confirmed where WorkHourID=WorkHourID">
<SelectParameters>
    <asp:SessionParameter DefaultValue="0" Name="CompanyID" SessionField="UserID" Type="Int32" />
    <asp:Parameter DefaultValue="false" Name="confirmed" Type="Boolean" />
</SelectParameters>
<UpdateParameters>
    <asp:Parameter Name="dateworked"/>
    <asp:Parameter Name="confirmed"/>
</UpdateParameters>
</asp:AccessDataSource>

Возможен ли вариант 1, если да, то как.

Если вариант 1 невозможен, как я могу решить проблему обновления моей таблицы, как в варианте 2.

Я все еще изучаю Visual Studio, поэтому я благодарен за любую помощь.

2 ответа

У меня тоже было много проблем с этим, и я обнаружил что-то, чего не было в этих сообщениях: главная причина для меня в том, что у меня был последний обновленный столбец datetime, который является обязательным и для которого в базе данных установлено значение по умолчанию, Я предполагал, что база данных будет обрабатывать свое обновление для меня, поэтому я использовал его как скрытый столбец в GridView.

После нескольких часов разочарования я начал все заново и проверил каждый шаг своих действий. Затем я обнаружил, что скрытие обязательного поля - это все, что вызывает эту проблему! Вы также можете заметить, что формат даты может быть отключен, в зависимости от ваших настроек, поэтому вам также потребуется предоставить его в правильном формате, если это необходимо.

Кстати, это не уникальная вещь доступа; это случается даже с Ms SQL сервером, и я думаю, что это произойдет и с другими базами данных.

Я думаю, что это также является причиной того, что несколько вопросов об этом отчете "иногда он работает, иногда нет" или "он работает для одной таблицы, а не для другой".

Если вы не хотите, чтобы пользователь изменял значения некоторых ваших столбцов, установите для них шаблоны и измените их свойства редактирования / добавления только для чтения.

Есть и другие способы справиться с этим, например, предоставить его значение в коде, когда он скрыт.

Я не вижу команду обновления в вашем источнике данных. Вы пытаетесь обновить его через страницу aspx, или у вас есть код за страницей?

Попробуйте добавить команду UpdateCommand в asp:accessDataSource. Я подозреваю, что в настоящее время вы просите обновить таблицу, если вы еще не сказали, что а) она разрешена и б) как она должна обновляться

После редактирования

это от макушки моей головы. Но попробуйте добавить что-то вроде следующего. (Похоже на select)

  UpdateCommand="UPDATE tblConfirmedworkhours  SET dateWorked=@dateWorked, confirmed =@confirmed where EmpName=@empName">
  <UpdateParameters>
    <asp:Parameter Name="dateWorked" />
    <asp:Parameter Name="confirmed" />
  </UpdateParameters>

У меня нет VS на этом ПК, поэтому я не могу дать точный ответ на данный момент извините. Тем не менее, я думаю, что вам может понадобиться указать номер сотрудника в ваших запросах, поскольку у вас может быть 2 сотрудника с одинаковыми именами, и вам нужна уникальная ссылка, чтобы различать их.

Другие вопросы по тегам