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>
                          &nbsp;<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>
                          &nbsp;<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 函数在页面回发后停止工作(鼠标悬停,单击)

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作

EF 更新未更新 GridView

Discord bot命令随机停止与python一起工作?

Composer 安装/更新停止工作

来自共享 Gitlab 运行器的 SSH 停止工作