RadGrid ASP.net AJAX - 小计未更新

问题描述

我有一个 radgrid 页面,该网格是分层的,并按小计和网格总计行分组。

当我在网格中编辑一个项目时;记录转到 SQL,NeedDataSource 事件触发并检索正确的数据;但是,子和总计不会更新。

我实际上添加了第二个网格,该网格仅通过辅助 SQL 请求显示总数,该请求在加载时获取正确的数据。当网格数据更新时,即使我重新绑定第二个网格,数据也会显示更改前的总和。奇怪的是,当我在第一个网格中展开另一个组时,第二个网格会使用新的总数进行更新。

标记:

<telerik:RadGrid ID="grdViewV1" runat="server" RenderMode="Lightweight" EnableViewState="true"  
                OnNeedDataSource="grdViewV1_NeedDataSource" OnDetailTableDataBind="grdViewV1_DetailTableDataBind" OnPreRender="grdViewV1_PreRender"
                OnItemDataBound="grdViewV1_ItemDataBound"   OnUpdateCommand="grdViewV1_UpdateCommand" OnItemUpdated="grdViewV1_ItemUpdated"             RetainExpandStateOnRebind="true" 
                ShowStatusBar="true" AutoGenerateColumns="false" PageSize="10" AllowMultiRowSelection="false"  AllowSorting="true" >
                <MasterTableView EnableHierarchyExpandAll="true" DataKeyNames="RequestedBy" AllowMultiColumnSorting="true" ShowFooter="true" AllowAutomaticUpdates="false" >
                    <DetailTables>
                        <telerik:GridTableView EnableHierarchyExpandAll="true" DataKeyNames="RequestedBy,otrqid" TableLayout="Auto" Width="100%" runat="server" Name="Requests"  >
                            <DetailTables>
                                <telerik:GridTableView EnableHierarchyExpandAll="true" TableLayout="Auto" DataKeyNames="otrqid" runat="server" Name="Employees" PageSize="10">
                                    <Columns>
                                        <telerik:GridBoundColumn UniqueName="otrqid" DataField="otrqid" Visible="false"></telerik:GridBoundColumn>
                                        <telerik:GridBoundColumn DataField="EmpName"  EnableHeaderContextMenu="false" HeaderText="Employee(s)"/>
                                    </Columns>
                                </telerik:GridTableView>
                            </DetailTables>
                            <BatchEditingSettings EditType="Row" SaveAllHierarchyLevels="true" />
                            <Columns>
                                <telerik:GridTemplateColumn HeaderStyle-VerticalAlign="Bottom"  DataField="ApprovalStatus" ItemStyle-Width="125px" HeaderText="Status" ColumnEditorID="ApprovalStatus"  >  
                                    <ItemTemplate>
                                        <asp:Label ID="lblStatus" runat="server" Text='<%# Eval("ApprovalStatus")%>'></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:Label ID="lblStatusE" runat="server" Text='<%# Eval("ApprovalStatus")%>' Visible="false"></asp:Label>
                                        <asp:DropDownList ID="ddleApStatus" runat="server" RenderMode="Lightweight" SelectedItem='<%#DataBinder.Eval(Container.DataItem,"ApprovalStatus")%>' >
                                            <asp:ListItem Text="Approved" Value="Approved"></asp:ListItem>
                                            <asp:ListItem Text="Denied"   Value="Denied"></asp:ListItem>
                                            <asp:ListItem Text="Escalate" Value="Escalate"></asp:ListItem>
                                            <asp:ListItem Text="Cancelled" Value="Cancelled"></asp:ListItem>
                                        </asp:DropDownList> 
                                    </EditItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridEditCommandColumn ItemStyle-Width="110px" HeaderStyle-VerticalAlign="Bottom" UniqueName="cxStatus" EnableHeaderContextMenu="false" ButtonType="ImageButton" ></telerik:GridEditCommandColumn>
                                <telerik:GridBoundColumn DataField="otrqid" Visible="false" UniqueName="otrqid" AllowFiltering="false" AllowSorting="false" ReadOnly="true"></telerik:GridBoundColumn>
                                <telerik:GridDateTimeColumn DataField="RequestedOn" HeaderStyle-VerticalAlign="Bottom" AllowFiltering="false" ItemStyle-Width="165px" HeaderText="Requested On" ReadOnly="true" DataFormatString="{0:MM/dd/yyyy}" >  </telerik:GridDateTimeColumn>
                                <telerik:GridBoundColumn DataField="RequestedBy" Visible="false" HeaderStyle-VerticalAlign="Bottom" FilterCheckListEnableLoadOnDemand="true"  ItemStyle-Width="200px" HeaderText="Requested By" ReadOnly="true"></telerik:GridBoundColumn>
                                <telerik:GridBoundColumn DataField="ApprovedBy" HeaderStyle-VerticalAlign="Bottom" FilterCheckListEnableLoadOnDemand="true"  ItemStyle-Width="200px" HeaderText="Addressed By" ReadOnly="true"></telerik:GridBoundColumn>
                                <telerik:GridDateTimeColumn  DataField="EventDateFrom" FooterStyle-VerticalAlign="Top" HeaderStyle-VerticalAlign="Bottom" AllowFiltering="false" FooterStyle-HorizontalAlign="Right"  ItemStyle-Width="160px" HeaderText="OT Date Start" UniqueName="DateStart" ReadOnly="true"  DataFormatString="{0:MM/dd/yyyy}" >  </telerik:GridDateTimeColumn> <%--CurrentFilterFunction="EqualTo" PickerType="DatePicker" EnableTimeIndependentFiltering="true"--%>
                                <telerik:GridDateTimeColumn  DataField="EventDateTo" HeaderStyle-VerticalAlign="Bottom" FooterStyle-HorizontalAlign="Right" AllowFiltering="false" ItemStyle-Width="160px" HeaderText="Through" UniqueName="DateEnd" ReadOnly="true" DataFormatString="{0:MM/dd/yyyy}" >  </telerik:GridDateTimeColumn> <%--CurrentFilterFunction="EqualTo" PickerType="DatePicker" EnableTimeIndependentFiltering="true" --%>
                                <telerik:GridNumericColumn DataField="OTHours" HeaderStyle-VerticalAlign="Bottom" AllowFiltering="false" 
                                    ItemStyle-HorizontalAlign="Center" HeaderText="Hours" DecimalDigits="2" ItemStyle-Width="105px" ReadOnly="true" UniqueName="Hours" >
                                </telerik:GridNumericColumn>
                                <telerik:GridBoundColumn DataField="Justification" HeaderStyle-VerticalAlign="Bottom" EnableHeaderContextMenu="false"  AllowFiltering="false" HeaderText="Justification" ReadOnly="true"></telerik:GridBoundColumn>
                                <telerik:GridNumericColumn DataField="Pending"  Aggregate="Sum" Visible="false" AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="PHours"></telerik:GridNumericColumn>
                                <telerik:GridNumericColumn DataField="Denied"   Aggregate="Sum" Visible="false" HeaderStyle-Width=".1" FooterStyle-Width=".1" ItemStyle-Width=".1" AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="DHours"></telerik:GridNumericColumn>
                                <telerik:GridNumericColumn DataField="Approved" Aggregate="Sum" Visible="false" ItemStyle-Width=".1" AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="AHours"></telerik:GridNumericColumn>
                                <telerik:GridNumericColumn DataField="Escalate" Aggregate="Sum" Visible="false"  ItemStyle-Width=".1" FooterText="Escalated: " GroupByExpression="EHours Group By EHours" AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="EHours"></telerik:GridNumericColumn>
                                <telerik:GridNumericColumn DataField="Cancelled" Aggregate="Sum" Visible="false" ItemStyle-Width=".1" FooterText="Cancelled: " GroupByExpression="EHours Group By EHours" AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="CHours"></telerik:GridNumericColumn>
                            </Columns>
                        </telerik:GridTableView>
                    </DetailTables>
                    <Columns>
                        <telerik:GridBoundColumn   DataField="RequestedBy" HeaderStyle-VerticalAlign="Bottom" FilterCheckListEnableLoadOnDemand="true" FooterText="Grand Totals: "  ItemStyle-Width="200px" HeaderText="Requested By" ReadOnly="true"></telerik:GridBoundColumn>
                        <telerik:GridNumericColumn DataField="Pending"     HeaderText="Pending"   Visible="true" FooterText="Pending: "  AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="PHours" Aggregate="Sum" FooterAggregateFormatString="{0:0.00}" DataFormatString="{0:0.00}" ></telerik:GridNumericColumn>
                        <telerik:GridNumericColumn DataField="Approved"    HeaderText ="Approved"  Visible="true" FooterText="Approved: " AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="AHours" Aggregate="Sum" FooterAggregateFormatString="{0:0.00}" DataFormatString="{0:0.00}" ></telerik:GridNumericColumn>
                        <telerik:GridNumericColumn DataField="Denied"      HeaderText="Denied"    Visible="true" FooterText="Denied: "   AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="DHours" Aggregate="Sum" FooterAggregateFormatString="{0:0.00}" DataFormatString="{0:0.00}" ></telerik:GridNumericColumn>                                
                        <telerik:GridNumericColumn DataField="Escalate"    HeaderText="Escalated" Visible="true" FooterText="Esalated: " AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="EHours" Aggregate="Sum" FooterAggregateFormatString="{0:0.00}" DataFormatString="{0:0.00}" ></telerik:GridNumericColumn>
                        <telerik:GridNumericColumn DataField="Cancelled"   HeaderText="Cancelled" Visible="true" FooterText="Cancelled: " AllowFiltering="false" DecimalDigits="2" ReadOnly="true" UniqueName="EHours" Aggregate="Sum" FooterAggregateFormatString="{0:0.00}" DataFormatString="{0:0.00}" ></telerik:GridNumericColumn>
                    </Columns>
                      
                </MasterTableView>
                    
            </telerik:RadGrid>

背后的代码:

protected void grdViewV1_UpdateCommand(object sender,GridCommandEventArgs e)
{
    try
    {
        GridEditableItem editedItem = (GridEditableItem) e.Item;
        DropDownList ddle = (DropDownList) editedItem.FindControl("ddleApStatus");
        string newStatus = ddle.SelectedValue;
        string rqID = editedItem.GetDataKeyValue("otrqid").ToString().Replace('{',' ').Replace('}',' ').Trim();
        string userSid = getUserSid();
        ll.UpdateRequestStatus(rqID,newStatus,userSid);
    }
    catch (Exception ex)
    {
        grdViewV1.Controls.Add(new LiteralControl("Unable To Update Request due to " + ex.Message));
    }
 }

 protected void grdViewV1_ItemDataBound(object sender,GridItemEventArgs e)
 {
    string userSid = getUserSid();
    OTUser thisUser = ll.getUserProps(userSid,"Manager");
    if (e.Item is GridEditableItem && e.Item.IsInEditMode)
    {
        GridEditableItem item = e.Item as GridEditableItem;
        DropDownList ddle = (DropDownList) item.FindControl("ddleApStatus");
        ddle.DataSource = rqStatus();
        ddle.DataTextField = "ApprovalStatus";
        ddle.DataValueField = "ApprovalStatus";
        ddle.DataBind();

        Label lblSat = (Label) item.FindControl("lblStatusE");
        if (!string.IsNullOrEmpty(lblSat.Text))
        {
            ddle.SelectedValue = lblSat.Text;
            ddle.SelectedItem.Text = lblSat.Text;
        }
    }
    else if (e.Item is GridDataItem && !e.Item.IsInEditMode && Page.IsPostBack)
    {
        GridDataItem ditem = (GridDataItem) e.Item;
        if (ditem.Cells.Count > 8)
        {
            var status = ditem.Cells[2].Controls;
            Label statTxt = (Label) status[1];
            string statStr = statTxt.Text.ToLower();
            if (!thisUser.hasSupervisor)
            {
                if (statStr != "escalate")
                {
                    ImageButton but = (ImageButton) ditem.Cells[3].Controls[0];
                    but.Visible = false;
                }
            }
            else
            {
                if (statStr != "pending")
                {
                    ImageButton but = (ImageButton) ditem.Cells[3].Controls[0];
                    but.Visible = false;
                }
            }
        }
    }
    else if (e.Item is GridDataItem)
    {
        GridDataItem ditem = (GridDataItem) e.Item;
        
        if (ditem.Cells.Count > 8)
        {
            var status = ditem.Cells[2].Controls;
            Label statTxt = (Label) status[1];
            string statStr = statTxt.Text.ToLower();

            if (!thisUser.hasSupervisor)
            {
                 if (statStr != "escalate")
                {
                    ImageButton but = (ImageButton) ditem.Cells[3].Controls[0];
                    but.Visible = false;
                }
            }
            else
            {
                if (statStr != "pending")
                {
                    ImageButton but = (ImageButton) ditem.Cells[3].Controls[0];
                    but.Visible = false;
                }
            }
        }
    }
 }

 protected void grdViewV1_NeedDataSource(object sender,GridNeedDataSourceEventArgs e)
 {
    string userSid = getUserSid();
    DataSet thisSet = ll.GetOTRData2(userSid);
    grdViewV1.DataSource = thisSet ;        
 }

 protected void grdViewV1_DetailTableDataBind(object sender,GridDetailTableDataBindEventArgs e)
 {
    string userSid = getUserSid();
    DataSet thisSet = (DataSet) grdViewV1.DataSource ;        
    GridDataItem dataItem = (GridDataItem) e.DetailTableView.ParentItem;
    switch (e.DetailTableView.Name)
    {
        case "Requests":
            {
                string requestor = dataItem.GetDataKeyValue("RequestedBy").ToString();
                string expression = "RequestedBy='" + requestor+"'";
                DataTable rData = thisSet.Tables["Requests"].Select(expression).CopyToDataTable();
                e.DetailTableView.DataSource = rData ;
                break;
            }
        case "Employees":
            {
                string otrqid = dataItem.GetDataKeyValue("otrqid").ToString();
                string expression = "otrqid = '" + otrqid + "'";
                DataTable eData = thisSet.Tables["Employees"].Select(expression).CopyToDataTable();
                e.DetailTableView.DataSource =eData;
                break;
            }
    }
 }

 protected void grdViewV1_PreRender(object sender,EventArgs e)
 {
    if (!Page.IsPostBack)
    {
        if (grdViewV1.MasterTableView.Items.Count >0 )
    {
       grdViewV1.MasterTableView.Items[0].Expanded = true;
    }
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...