如何从Visual Studio中的GridView更新Access数据库?

时间:2015-06-25 08:10:19

标签: c# asp.net ms-access gridview accessdatasource

我在Visual Studio 2010中使用网格视图时尝试更新访问数据库但没有取得任何成功。让我试着解释一下我的内容。

我有一个带有表格的访问数据库" tblConfirmedworkhours"其中包含字段" dateworked" &安培; "确认&#34 ;.我可以使用编辑/更新链接在我的网页上显示已过滤的表格,但表格不会更新。

选项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 个答案:

答案 0 :(得分:0)

我没有在您的数据源中看到更新命令。您是尝试通过aspx页面更新它,还是后面有代码?

尝试在asp:accessDataSource中添加UpdateCommand。我怀疑,目前,当你没有告诉它时,你要求表格更新 a)允许 和 b)如何更新

编辑后。

这是我的头脑。但是尝试添加类似下面的内容(与选择类似)

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

我在这台电脑上没有VS,所以我暂时无法给出确切的答案。但是,我认为您可能还需要在查询中包含员工编号,因为您可能有2名具有相同名称的员工,并且您需要一个唯一的参考来区分它们。

答案 1 :(得分:0)

我也遇到了很多麻烦并发现了这些帖子中没有出现的内容:我的主要原因是我有一个lastupdated datetime列,这是必需的,并设置了默认值在数据库中。我假设数据库会为我处理它的更新,所以我将它作为GridView中的隐藏列。

经过数小时的挫折,我重新开始并测试了我行动的每一步。然后我发现隐藏一个必填字段就是导致这个问题!您可能还注意到日期格式可能已关闭,具体取决于您的设置,因此如果需要,您还需要以正确的格式提供日期格式。

顺便说一下,它不是一个独特的Access事物;即使使用Ms SQL服务器也会发生这种情况,我想其他数据库也会发生这种情况。

我想这也是有关此报告的几个问题的原因,有时它有效,有时它不会,或者“它适用于一个表而不是另一个表”。&#39;

如果您不希望用户更改某些列的值,请将其设置为模板并将其编辑/添加属性更改为只读。

还有其他方法可以解决这个问题,例如,当隐藏它时,在代码中提供它的值。