Gridview 中的更新命令停止工作(以前工作和删除,选择工作正常)
Posted
技术标签:
【中文标题】Gridview 中的更新命令停止工作(以前工作和删除,选择工作正常)【英文标题】:Update Command in Gridview stopped working (used to work before and delete, select works fine) 【发布时间】:2012-12-11 14:57:51 【问题描述】:我有一个使用具有选择、插入、删除和更新功能的 accessdatasource 的 gridview。它曾经完美地工作,但突然间更新停止工作,而其余部分仍在按预期工作。我没有更改网格视图或数据源中的任何内容,但我向表中添加了新字段但未显示在网格视图中。我通过从表中删除也不起作用的新字段进行测试。也刷新了数据源和网格视图。这是代码
asp:GridView ID="GridView1" runat="server" AllowSorting="True"
ShowFooter="True" EmptyDataText="There are no records for the selection"
AutoGenerateColumns="False" CellPadding="4" OnRowCommand="Insert_Click"
OnRowUpdating="beforeUpdate"
DataKeyNames="Lab Name,Target,Device Name"
ForeColor="#333333" HorizontalAlign="Center"
EmptyDataRowStyle-HorizontalAlign="Center"
EmptyDataRowStyle-VerticalAlign="Middle" Width="1333px"
DataSourceID="AccessDataSource8">
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EmptyDataRowStyle Wrap="False" />
<Columns>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure?');" ></asp:LinkButton>
</ItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="LinkButton" runat="server" CommandName="Insert" Text="Insert" ValidationGroup="validate" ></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Lab Name" SortExpression="Lab Name">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("[Lab Name]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("[Lab Name]") %>'></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtLabname" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="LabName" runat="server" ControlToValidate="txtLabname" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Target" SortExpression="Target">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Target") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Target") %>'></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtTarget" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Target" runat="server" ControlToValidate="txtTarget" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Device Name" SortExpression="Device Name">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("[Device Name]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("[Device Name]") %>'></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtDevicename" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Devicename" runat="server" ControlToValidate="txtDevicename" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="IO Type Requirement"
SortExpression="IO Type Requirement">
<ItemTemplate>
<asp:Label ID="Label4" runat="server"
Text='<%# Bind("[IO Type Requirement]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"
Text='<%# Bind("[IO Type Requirement]") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtIotyperequirement" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Iotyperequirement" runat="server" ControlToValidate="txtIotyperequirement" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Part Number" SortExpression="Part Number">
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("[Part Number]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[Part Number]") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtPartnumber" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Partnumber" runat="server" ControlToValidate="txtPartnumber" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sub Part" SortExpression="Sub Part">
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("[Sub Part]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("[Sub Part]") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtSubpart" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Subpart" runat="server" ControlToValidate="txtSubpart" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Subpart Description"
SortExpression="Subpart Description">
<ItemTemplate>
<asp:Label ID="Label7" runat="server"
Text='<%# Bind("[Subpart Description]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server"
Text='<%# Bind("[Subpart Description]") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtSubpartdesc" runat="server" ></asp:TextBox>
<asp:RequiredFieldValidator ID="Subpartdesc" runat="server" ControlToValidate="txtSubpartdesc" Text="*" ValidationGroup="validate"/>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" VerticalAlign="Middle" Wrap="False" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775"
VerticalAlign="Middle" Wrap="False" />
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource8" runat="server" CancelSelectOnNullParameter="False"
DataFile="~/App_Data/Test.mdb"
SelectCommand="SELECT Lab1.[Lab Name], Lab1.[Target], Lab1.[Device Name], Lab1.[IO Type Requirement], Lab1.[Part Number], Lab1.[Sub Part], Lab1.[Subpart Description]
FROM Lab1
WHERE
(((Lab1.[Lab Name])= [WhichLab] OR [WhichLab] = '0') AND
((Lab1.[Target])= [WhichTarget] OR [WhichTarget] = '0') AND
((Lab1.[Device Name])= [WhichDevice] OR [WhichDevice] = '0') AND
((Lab1.[IO Type Requirement])= [Whichiotyperequirement] OR [Whichiotyperequirement] = '0') AND
((Lab1.[Part Number])= [WhichPartNumber] OR [WhichPartNumber] = '0') AND
((Lab1.[Sub Part])= [WhichSubPart] OR [WhichSubPart] = '0') AND
((Lab1.[Subpart Description])= [WhichSubPartDesc] OR [WhichSubPartDesc] = '0')
)" UpdateCommand= " UPDATE [Lab1] SET [IO Type Requirement]= ?, [Part Number]= ?, [Sub Part]= ?, [Subpart Description]= ?
WHERE ([Lab Name]= ?) AND ([Target]= ?) AND ([Device Name] = ?)"
InsertCommand= "INSERT INTO LAB1 ([Lab Name],[Target],[Device Name],[IO Type Requirement],[Part Number],[Sub Part],[Subpart Description]) VALUES
([WhichLab],[WhichTarget],[WhichDevice],[Whichiotyperequirement],[WhichPartNumber],[WhichSubPart],[WhichSubPartDesc]) "
DeleteCommand= " Delete from LAB1 WHERE LAB1.[Lab Name]= [WhichLab] AND Lab1.[Target]=[WhichTarget] AND Lab1.[Device Name]=[WhichDevice]">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="Lab Name" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList2" Name="Target" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList3" Name="Device Name" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList4" Name="IO Type Requirement" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList5" Name="Part Number" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList6" Name="Sub Part" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList7" Name="Subpart Description" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="IO Type Requirement" Type="String"/>
<asp:Parameter Name="Part Number" Type="String"/>
<asp:Parameter Name="Sub Part" Type="String" />
<asp:Parameter Name="Subpart Description" Type="String"/>
<asp:Parameter Name="Lab Name" Type="String"/>
<asp:Parameter Name="Target" Type="String"/>
<asp:Parameter Name="Device Name" Type="String"/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Lab Name" Type="String" />
<asp:Parameter Name="Target" Type="String" />
<asp:Parameter Name="Device Name" Type="String" />
<asp:Parameter Name="IO Type Requirement" Type="String" />
<asp:Parameter Name="Part Number" Type="String" />
<asp:Parameter Name="Sub Part" Type="String" />
<asp:Parameter Name="Subpart Description" Type="String" />
</InsertParameters>
<DeleteParameters>
<asp:Parameter Name="Lab Name" Type="String" />
<asp:Parameter Name="Target" Type="String" />
<asp:Parameter Name="Device Name" Type="String" />
</DeleteParameters>
</asp:AccessDataSource>
【问题讨论】:
CausesValidation="True" 可能导致? 我已将其更改为 false 并进行了测试,但没有成功。 【参考方案1】:WHERE 子句中的一个字段:
WHERE ([Lab Name]= ?) AND ([Target]= ?) AND ([Device Name] = ?)"
...不匹配记录。可能在一个或多个字段中有尾随空格。
"ABC"
将不匹配 "ABC "
【讨论】:
不,我没有查看任何空格,并且我对其他 gridview 也有同样的问题,它只是功能相同但表格不同。 如果没有记录被更新,并且没有错误信息,那一定是WHERE子句没有找到记录。或者,您正在更新数据库 A,然后在数据库 B 中查找。或者,数据库区分大小写并且“A”不等于“a”。 我在前端的 OnUpdating 方法中测试了更新查询,它可以工作,但不能通过数据源进行,而且从同一个数据源中选择、删除和插入可以正常工作。我注意到,如果我更改更新参数,我的意思是如果我在那里输入错误的名称,那不会引发错误,但如果我在查询中输入错误,则会引发错误。所以更新参数不起作用,我该如何解决。 删除有效吗? UPDATE 和 DELETE 语句中的 WHERE 子句非常不同。顺便说一句,当您使用单个自动递增的 int 作为主 ID 时,情况会好很多。 是的 DELETE 工作正常,UPDATE 和 DELETE 的 where 子句相同,我改变了吗?类似于 DELETE where 子句无效的符号。我正在考虑那个自动递增键,但必须为此更改整个网站,最奇怪的是它以前可以正常工作,而我没有更改其中的一个字母。以上是关于Gridview 中的更新命令停止工作(以前工作和删除,选择工作正常)的主要内容,如果未能解决你的问题,请参考以下文章
GridView 上的 jQuery 函数在页面回发后停止工作(鼠标悬停,单击)