2014-09-04 6 views
0

저는 최근에 my answer here처럼 언제든지 중첩 된 RadGrid 컨트롤을 참조하는 방법을 알아 냈습니다.편집 모드의 중첩 된 RadGrid에는 변경되지 않은 값이 있습니다.

그러나 내 주 격자 및 중첩 된 격자는 편집 모드에 있으며 중첩 된 격자의 새 값은 다시 게시하는 동안에는 존재하지 않습니다. 어떤 열의 값을 편집 한 다음 내 버튼을 클릭하여 포스트 백을 실행하면 중첩 된 RadGrid에 액세스 할 때 해당 값이 변경되지 않습니다 (새 값은 이전 값과 동일 함).

영문 (닫는 태그와 클라이언트 측을 포함하지 않는 자바 스크립트 메소드 정의 및 기타 임의 설정) :

<telerik:RadGrid ID="RadGrid1" runat="server" HeaderStyle-Width="675px" Width="675px" Height="359px" PageSize="10" GridLines="None" AccessKey="0" Skin="Office2007" ImagesPath="~/Skins/Office2007/Grid/Images" AllowFilteringByColumn="false" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" 
OnNeedDataSource="RadGrid1_NeedDataSource" OnItemDataBound="RadGrid1_ItemDataBound" OnItemCreated="RadGrid1_ItemCreated" OnEditCommand="RadGrid1_EditCommand" OnCancelCommand="RadGrid1_CancelCommand" OnUpdateCommand="RadGrid1_UpdateCommand" OnItemCommand="RadGrid1_ItemCommand" OnPreRender="RadGrid1_PreRender" > 
    <MasterTableView Name="Parent" HierarchyDefaultExpanded="false" HierarchyLoadMode="ServerBind" DataKeyNames="ID" EditMode="InPlace" > 
     <NestedViewTemplate> 
      <asp:Panel ID="RadGrid2" runat="server" > 
       <telerik:RadGrid ID="rgDetailItems" runat="server" Width="1675px" AutoGenerateColumns="false" AllowPaging="false" ShowFooter="true" 
       OnEditCommand="rgDetailItems_EditCommand" OnCancelCommand="rgDetailItems_CancelCommand" OnUpdateCommand="rgDetailItems_UpdateCommand" 
       OnNeedDataSource="rgDetailItems_NeedDataSource" OnItemDataBound="rgDetailItems_ItemDataBound" > 
        <MasterTableView EditMode="InPlace"> 
         <Columns> 
          <telerik:GridBoundColumn HeaderText="Amount" DataField="DtlTransAmount" UniqueName="DtlTransAmount" SortExpression="DtlTransAmount" 
          HeaderStyle-Width="20px" ItemStyle-Width="20px" FilterControlWidth="20px" DataFormatString="{0:$0.00}"/> 

CS :

var items = ((RadGrid1.MasterTableView.Items[0].ChildItem as GridNestedViewItem) 
    .FindControl("RadGrid2") as RadGrid).EditItems; 
foreach (GridEditableItem editItem in items) 
{ 
    Hashtable newValues = new Hashtable(); 
    editItem.OwnerTableView.ExtractValuesFromItem(newValues, editItem); 
    foreach (DictionaryEntry de in newValues) 
    { 
     string valOld = (editItem.SavedOldValues[de.Key] as string) ?? ""; 
     string valNew = (newValues[de.Key] as string) ?? ""; 

     // valOld always equals valNew! 
    } 
} 

중첩 된 RadGrid 또는 얻을 수있는 다른 방법이 있나요 항목을 편집하여 값이 존재합니까?

+0

당신이 당신의 aspx 페이지 코드를 제공 주시겠습니까? –

+0

격자에 aspx 마크 업 게시 됨. 나는 'ClientSettings'와'EditItemStyle'과 같은 추가 정보를 제거했습니다. – DanM7

+0

나는 @JayeshGoyani의 답을 얻었다. 이것 좀 봐 주셔서 감사합니다. – DanM7

답변

1

이 문제의 원인은 0 번째 색인의 항목이 전체적으로 그리드가 아니기 때문에 그리드의 현재 행입니다. 새 값이 표시되지 않는 이유는 행 모음에서 첫 번째 행만 확인하기 때문입니다 (Items[0]).

이 솔루션은 주요 RadGrid의 각 행을 통해 루프이며, 각 행 (Items[i]) 중첩 RadGrid과 그 행을 얻기 위해 :

for (int i = 0; i < RadGrid1.EditItems.Count; i++) 
{ 
    var items = ((RadGrid1.MasterTableView.Items[i].ChildItem as GridNestedViewItem) 
     .FindControl("RadGrid2") as RadGrid).EditItems; 
    foreach (GridEditableItem editItem in items) 
    { 
     Hashtable newValues = new Hashtable(); 
     editItem.OwnerTableView.ExtractValuesFromItem(newValues, editItem); 
     foreach (DictionaryEntry de in newValues) 
     { 
      string valOld = (editItem.SavedOldValues[de.Key] as string) ?? ""; 
      string valNew = (newValues[de.Key] as string) ?? ""; 

      // valNew contains new values if they were changed by the user! 
     } 
    } 
} 
+1

안녕하세요 @ DanM7 내가 실수로 downvoted대로 답변을 편집하십시오. 이제 잠겨 있었고 되돌릴 수 없었습니다. 그것은 당신이 대답을 편집하면 upvote 수 있습니다. 감사합니다 –

+1

확실한 것은, 방금 편집했습니다. 나는 upvote 주셔서 감사합니다! – DanM7