大家。我正在编写一个相当简单的页面,其中一个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>
答案 0 :(得分:0)
我试图在我能想到的所有点重新绑定网格(重新设置DataSourceID字符串,或者在PageLoad和发出DataBind()调用)和各种事件处理程序。
我怀疑这是你的问题。根据您的描述,它听起来并不像您需要显式重新绑定网格,并且在这样做时您应该期望网格的状态被重置。我建议删除所有对DataBind()的调用或重置DataSourceID。
答案 1 :(得分:0)
页面后面的代码肯定有助于分析问题。
最常见的原因是甚至回发中的数据绑定。 因此,请确保您在pageload中的数据绑定是这样的:
if(!Page.PostBack){
//Your Grid Databinding
}