c# - 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;
}
}
解决方案
推荐阅读
- enterprise-architect - 如何在 Enterprise Architect 部署模型中对可重用的计算机配置进行建模
- javascript - Angular:无法使用 UrlMatcher 导航到子路由
- python - 我无法在 docker 中安装 opencv-contrib-python
- android - 从 MainActivity 访问数据库中的行有什么问题?
- c++ - 未加权无向图中的算子错误和边插入问题
- sql-server - 如何将现有的 SSRS 设置迁移到新服务器?
- javascript - 我的javascript函数在没有被调用的情况下运行是否有原因?
- javascript - 如何使用 d3-force 定义和使用自定义力?
- python - 如何为 Jupyter 中的每个单元格设置 matplotlib 的 DPI
- windows - 如何从命令行构建一个qt项目?