单击命令按钮(编辑,更新,取消)时,Gridview会丢失其数据

时间:2012-10-26 19:48:01

标签: asp.net

大家。我正在编写一个相当简单的页面,其中一个GridView从SQLDataSource获取数据,这是我之前所做的。当页面加载时,它进行初始搜索,显示适合访问页面的人的信息。这很好。我可以改变搜索条件并发出修改后的查询,这是有效的。但是,当我单击“编辑”按钮时,Gridview将消失并显示EmptyDataText。如果我点击按钮重新提交搜索,Gridview将重新出现在编辑模式中。我可以修改字段并单击“更新”按钮,然后再次获取EmptyDataText。重新提交搜索后,Gridview会重新出现,更改的字段会更新为新值。

我可以捕获OnRowEditing事件,该事件显示该按钮有效。我可以捕获紧随其后的RowDatabound事件 - Gridview仍然可见,我假设它正在处理标题行。在点击继续时,我得到EmptyDataText并且再次看不到RowDataBound事件。我的假设是它在第一个数据行中查找数据,但没有找到任何数据,因此文本显示。

当我重新提交搜索时,我再次看到RowDataBound事件,并且在对应于具有单击的Edit按钮的行的事件上,我观察编辑模式显示的预处理 - 这包括从一个复制ItemList search-criteria DropDownList到EditTemplate DropDownList。在n +!st Step Into中,GridView显示,在编辑模式下显示正确的行。

当我点击更新或取消时,类似的模式成立。当任何命令按钮被命中时,看起来GridView正在丢失它与数据的链接,并且需要重新提交搜索以重新建立链接。我试图在我能想到的所有点重新绑定网格(重新设置DataSourceID字符串,或者在PageLoad和发出DataBind()调用)和各种事件处理程序。但是,我过去做过这种链接和编辑,而不必非常苛刻。很明显,我错过了一些关键的,可能相当轻微的步骤,使这种情况不同。现在,我只想弄清楚如何让Gridview进入编辑模式并重新渲染,而不会在完成OnRowEditing后进入编辑模式时丢失它与数据行的链接。有什么想法吗?

以下是有问题的Gridview:

<asp:GridView ID="gvTaskStatus" runat="server" EmptyDataText="No tasks match your search criteria"  
 AllowSorting="true"  Visible="true" AutoGenerateEditButton="true" 
 DataKeyNames="EDA_RequestID"
 CssClass="GenDisplayStyle"  CellPadding="3"
 AutoGenerateColumns="false" Font-Size="X-Small"  

 OnSorted="gvSorted"                    
 OnRowUpdating="gvTask_OnRowUpdating" 
 OnRowUpdated="gvTask_OnRowUpdated" 
 OnRowCancelingEdit="gvTask_OnRowCancelled"  
 OnRowDataBound="gvTaskStatus_RowDataBound" 
 OnRowEditing="gvTaskStatus_OnRowEditing"
 >

<HeaderStyle CssClass="GridHeader" />
<AlternatingRowStyle BackColor="AliceBlue"/>

<Columns>
  <asp:BoundField DataField="EDA_RequestID" HeaderText="Request ID" ReadOnly="true" Visible="false" />
  <asp:BoundField DataField="Requestor" HeaderText="Requestor"  
              SortExpression="Requestor" ReadOnly="true"/>
  <asp:BoundField DataField="ProjectName" HeaderText="Project Name" 
              SortExpression="ProjectName" />
  <asp:BoundField DataField="ChargeNumber" HeaderText="Charge Number"
              SortExpression="ChargeNumber" />

  <asp:TemplateField HeaderText="Assigned To" SortExpression="AssignedTo" >
      <ItemTemplate>
         <asp:Label Text='<%#Eval("AssignedTo")%>' runat="server" ID="ShowAssigned" />
      </ItemTemplate>
      <EditItemTemplate>
         <asp:DropDownList runat="server" ID="EditAssigned" AutoPostBack="False"    
                           OnSelectedIndexChanged="PersonAssigned" >
         </asp:DropDownList>
      </EditItemTemplate>
      </asp:TemplateField>

<asp:BoundField DataField="MEPartNumber" HeaderText="Part Number"  
                SortExpression="MEPartNumber" />
<asp:BoundField DataField="ReceivedDate" HeaderText="Date Submitted"  
             SortExpression="ReceivedDate" ReadOnly="true"/>
    <!-- Some rows, all boundfields, deleted for length  -->        

</Columns>
</asp:GridView>

数据来源:

<asp:SqlDataSource ID="EDASource" runat="server" 
        DataSourceMode="DataSet" CancelSelectOnNullParameter="false"    
        ConnectionString="<%$ ConnectionStrings:MECDConnectionString %>" 
        ProviderName="System.Data.SqlClient" OnSelected="SqlDataSelectedEvent" >

     <SelectParameters>
        <asp:ControlParameter Name="MEPNTxt"    ControlID="MEPNTxt"      PropertyName="Text"   Type="String" />
        <asp:ControlParameter Name="CommentsTxt" ControlID="CommentsTxt" PropertyName="Text"   Type="String" />  
        <asp:Parameter Name="AssignedTo" Type="String" />
        <asp:Parameter Name="TopStatus"  Type="String" />
        <asp:Parameter Name="Requestor"  Type="String" />
        <asp:Parameter Name="SubmitDate" Type="String" />
     </SelectParameters>

     <UpdateParameters>
        <asp:Parameter Name="UdEDA_ID"       Type="Int32" />
        <asp:Parameter Name="UdAssignedTo"   Type="String" />
        <asp:Parameter Name="UdActEndDate"   Type="DateTime" />
        <asp:Parameter Name="UdProjectName"  Type="String" />
        <asp:Parameter Name="UdChargeNumber" Type="String" />
        <asp:Parameter Name="UdDatasheetURL" Type="String" />
        <asp:Parameter Name="UdComments"     Type="String" />
        <asp:Parameter Name="UdMEPartNumber" Type="String" />
        <asp:Parameter Name="UdTopStatus"    Type="String" />
        <asp:Parameter Name="UdSymStatus"    Type="String" />
        <asp:Parameter Name="UdSymChecked"   Type="String" />
        <asp:Parameter Name="UdFtpStatus"    Type="String" />
        <asp:Parameter Name="UdFtpChecked"   Type="String" />
        <asp:Parameter Name="UdParamStatus"  Type="String" />
     </UpdateParameters>

   </asp:SqlDataSource>

2 个答案:

答案 0 :(得分:0)

  

我试图在我能想到的所有点重新绑定网格(重新设置DataSourceID字符串,或者在PageLoad和发出DataBind()调用)和各种事件处理程序。

我怀疑这是你的问题。根据您的描述,它听起来并不像您需要显式重新绑定网格,并且在这样做时您应该期望网格的状态被重置。我建议删除所有对DataBind()的调用或重置DataSourceID。

答案 1 :(得分:0)

页面后面的代码肯定有助于分析问题。

最常见的原因是甚至回发中的数据绑定。 因此,请确保您在pageload中的数据绑定是这样的:

if(!Page.PostBack){
//Your Grid Databinding
}