每个人。我正在编写一个相当简单的页面,它带有一个从 SQLDataSource 获取数据的 GridView,这是我以前做过的。当页面加载时,它会进行初始搜索,显示适合访问页面的人的信息。这很好用。我可以改变搜索词并发出修改后的查询,这很有效。但是,当我单击编辑按钮时,Gridview 消失并且 EmptyDataText 出现。如果我点击按钮重新提交搜索,Gridview 将重新出现在编辑模式中。我可以修改字段并点击更新按钮,然后再次获取 EmptyDataText。重新提交搜索,Gridview 重新出现,更改的字段更新为新值。
我可以捕捉到 OnRowEditing 事件,该事件表明该按钮有效。我可以捕获紧随其后的 RowDatabound 事件 - Gridview 仍然可见,我假设它正在处理标题行。在点击继续时,我得到 EmptyDataText 并且不再看到 RowDataBound 事件。我的假设是它会在第一个数据行中查找数据,但没有找到任何数据,因此会显示文本。
当我重新提交搜索时,我再次看到 RowDataBound 事件,并且在与单击编辑按钮的行对应的事件上,我观察编辑模式显示的预处理 - 这包括从搜索条件复制 ItemList DropDownList 到 EditTemplate DropDownList。在 n + !st Step Into 上,显示 GridView,并在编辑模式下显示正确的行。
当我点击更新或取消时,类似的模式也成立。当任何命令按钮被点击时,看起来 GridView 正在丢失它的数据链接,并且需要重新提交搜索以重新建立链接。我已尝试在 PageLoad 和各种事件处理程序中在我能想到的所有点重新绑定网格(重新设置 DataSourceID 字符串,或者发出 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>