-1

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

我有一个带有“tblConfirmedworkhours”表的访问数据库,其中包含“dateworked”和“confirmed”字段。我可以使用编辑/更新链接在我的网页上显示过滤后的表格,但表格不会更新。

选项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,因此非常感谢任何和所有帮助。

4

2 回答 2

0

I don't see an update command in your datasource. Are you trying to update it via the aspx page, or do you have a code behind page?

Try adding an UpdateCommand in the asp:accessDataSource. I suspect that at present, you are asking the tabel to update, when you haven't told it that a) It is allowed to and b) How it should update

After edit.

this is from the top of my head. But try adding in something like the following in. (Similar to the select)

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

I don't have VS on this PC so I can't give an exact answer at the moment sorry. However, I think you may need to also have the employee number in your queries, as you may have 2 employees with the same name, and you need a unique reference to distinguish between them.

于 2015-06-25T10:22:11.453 回答
0

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

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

顺便说一句,它不是唯一的 Access 东西;它甚至发生在 MS SQL 服务器上,我想其他数据库也会发生。

我想这也是关于此报告的几个问题“有时有效,有时无效”或“它适用于一张桌子而不适用于另一张桌子”的原因。

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

还有其他方法来处理这个问题,例如,在隐藏时在代码中提供它的值。

于 2017-05-04T01:29:04.007 回答