如何解决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 举报,一经查实,本站将立刻删除。