2014-04-07 9 views
0

중첩 된 래스터 격자를 사용하고 있습니다. 코드를 살펴보십시오. 액세스 상세 표 rowdrop 이벤트의 데이터 키 번호

<telerik:RadGrid ID="radGridRoutes" runat="server" AutoGenerateColumns="false" ShowStatusBar="True" 
     AllowSorting="True" AllowPaging="True" ClientSettings-Scrolling-EnableVirtualScrollPaging="false" 
     ClientSettings-Scrolling-AllowScroll="false" 
     OnNeedDataSource="Routes_NeedDataSource" OnDetailTableDataBind="radGridRoutes_DetailTableDataBind" AllowFilteringByColumn="True" 
     EnableLinqExpressions="false" OnInsertCommand="Routes_InsertCommand" 
     OnUpdateCommand="radGridRoutes_UpdateCommand" 
     OnItemCommand="radGridRoutes_ItemCommand" 
     OnPreRender="radGridRoutes_PreRender" ClientSettings-AllowRowsDragDrop="true" 
     OnRowDrop="radGridRoutes_RowDrop"> 
     <ClientSettings AllowDragToGroup="True"> 
      <Selecting AllowRowSelect="True" /> 
     </ClientSettings> 
     <GroupingSettings CaseSensitive="false" /> 
     <SelectedItemStyle CssClass="SelectedItem" /> 
     <PagerStyle Mode="NextPrevNumericAndAdvanced"></PagerStyle> 
     <ValidationSettings CommandsToValidate="PerformInsert,Update" EnableModelValidation="true" 
      EnableValidation="true" /> 
     <FilterItemStyle BackColor="#F8F8F8" HorizontalAlign="Left" /> 
     <FilterMenu EnableImageSprites="false"> 
     </FilterMenu> 
     <MasterTableView DataKeyNames="ID" AllowMultiColumnSorting="false" 
      Width="100%" CommandItemDisplay="Top" Name="Routes"> 
      <AlternatingItemStyle BackColor="WhiteSmoke" /> 

      <DetailTables> 
       <telerik:GridTableView OnRowDrop="radGridRoutes_RowDrop" ClientSettings-AllowRowsDragDrop="true" 
        DataKeyNames="ID,DisplayOrder,RouteID" Width="100%" runat="server" 
        CommandItemDisplay="Top" Name="Stops" AllowFilteringByColumn="false"> 
        <CommandItemSettings AddNewRecordText="Add New Stops" ShowAddNewRecordButton="true" /> 
        <ParentTableRelation> 
         <%-- <telerik:GridRelationFields DetailKeyField="ID" MasterKeyField="ID" />--%> 
        </ParentTableRelation> 
        <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> 
        </RowIndicatorColumn> 
        <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"> 
        </ExpandCollapseColumn> 
        <Columns> 
         <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditTask" EditText="Edit" 
          UpdateText="Update" CancelText="Cancel"> 
          <HeaderStyle Width="20px" /> 
         </telerik:GridEditCommandColumn> 

         <telerik:GridTemplateColumn SortExpression="Name" HeaderText="Name" UniqueName="Name" 
          HeaderButtonType="TextButton" HeaderStyle-Width="15%" ItemStyle-Width="15%" DataField="tName"> 
          <ItemTemplate> 
           <%# Eval("Name")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtName" runat="server" Width="250px" Text='<%# Eval("Name")%>'></asp:TextBox> 
           <asp:RequiredFieldValidator ID="requiredName" ControlToValidate="txtName" 
            CssClass="validationMessage" ErrorMessage="Name is required." 
            Text="* required" runat="server" Display="Dynamic"></asp:RequiredFieldValidator> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 
         <telerik:GridTemplateColumn SortExpression="Comment" HeaderText="Comment" UniqueName="Comment" 
          HeaderButtonType="TextButton" DataField="Comment"> 
          <ItemTemplate> 
           <%# Eval("Comment")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtComment" TextMode="MultiLine" Rows="4" Width="250px" runat="server" Text='<%# Eval("Comment")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="Address" HeaderText="Address" 
          DataField="Address" UniqueName="Address" HeaderButtonType="TextButton"> 
          <ItemTemplate> 
           <%# Eval("Address")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtAddress" Width="250px" TextMode="MultiLine" Text='<%# Bind("Address") %>' runat="server"></asp:TextBox> 

          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="Phone" HeaderText="Phone" UniqueName="Phone" 
          HeaderButtonType="TextButton" DataField="Phone"> 
          <ItemTemplate> 
           <%# Eval("Phone")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtPhone" Rows="4" Width="250px" runat="server" Text='<%# Eval("Phone")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="Email" HeaderText="Email" UniqueName="Email" 
          HeaderButtonType="TextButton" DataField="Email"> 
          <ItemTemplate> 
           <%# Eval("Email")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtEmail" Rows="4" Width="250px" runat="server" Text='<%# Eval("Email")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="ManagerName" HeaderText="ManagerName" UniqueName="ManagerName" 
          HeaderButtonType="TextButton" DataField="ManagerName"> 
          <ItemTemplate> 
           <%# Eval("ManagerName")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtManagerName" Rows="4" Width="250px" runat="server" Text='<%# Eval("ManagerName")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="NumberOfRooms" HeaderText="#Rooms" UniqueName="NumberOfRooms" 
          HeaderButtonType="TextButton" DataField="NumberOfRooms"> 
          <ItemTemplate> 
           <%# Eval("NumberOfRooms")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtNumberOfRooms" Width="250px" Rows="4" runat="server" Text='<%# Eval("NumberOfRooms")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="Merchandising" HeaderText="Merchandising" UniqueName="Merchandising" 
          HeaderButtonType="TextButton" DataField="Merchandising"> 
          <ItemTemplate> 
           <%# Eval("Merchandising")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtMerchandising" Width="250px" Rows="4" runat="server" Text='<%# Eval("Merchandising")%>'></asp:TextBox> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="Frequency" HeaderText="Frequency" 
          DataField="Frequency" UniqueName="Frequency" HeaderButtonType="TextButton"> 
          <ItemTemplate> 
           <%# GetFrequencyName(Convert.ToInt32(Eval("FrequencyID"))) %> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:DropDownList ID="drpFreq" runat="server" DataTextField="Name" DataValueField="ID" 
            AppendDataBoundItems="true"> 
            <asp:ListItem Text="--Select--" Value="-1"> 
            </asp:ListItem> 
           </asp:DropDownList> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn SortExpression="DisplayOrder" HeaderText="Display Order" UniqueName="DisplayOrder" 
          HeaderButtonType="TextButton" HeaderStyle-Width="15%" ItemStyle-Width="15%" DataField="DisplayOrder"> 
          <ItemTemplate> 
           <%# Eval("DisplayOrder")%> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtDisplayOrder" runat="server" Width="250px" Text='<%# Eval("DisplayOrder")%>'></asp:TextBox> 
           <asp:RequiredFieldValidator ID="requiredDisplayOrder" ControlToValidate="txtDisplayOrder" 
            CssClass="validationMessage" ErrorMessage="Display Order is required." 
            Text="* required" runat="server" Display="Dynamic"></asp:RequiredFieldValidator> 
          </EditItemTemplate> 
         </telerik:GridTemplateColumn> 

         <telerik:GridTemplateColumn HeaderText="Delete" AllowFiltering="false"> 
          <ItemTemplate> 
           <asp:LinkButton ID="lnkDelete" CommandName="DeleteStops" CommandArgument=' <%# Eval("ID") %>' runat="server" OnClientClick="javascript:if (!confirm('Are you sure you want to delete Stop?')) { 
             return false; 
            }">Delete</asp:LinkButton> 
          </ItemTemplate> 
         </telerik:GridTemplateColumn> 

        </Columns> 
        <EditFormSettings> 
         <EditColumn FilterControlAltText="Filter EditCommandColumn column"> 
         </EditColumn> 
        </EditFormSettings> 
       </telerik:GridTableView> 
      </DetailTables> 
      <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> 
      </RowIndicatorColumn> 
      <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"> 
      </ExpandCollapseColumn> 
      <Columns> 
       <telerik:GridEditCommandColumn ButtonType="ImageButton" CancelText="Cancel" EditText="Edit" 
        UpdateText="Update" UniqueName="EditRoutes" ItemStyle-Width="5%"> 
        <HeaderStyle Width="5%" /> 
       </telerik:GridEditCommandColumn> 
       <telerik:GridTemplateColumn SortExpression="Name" HeaderText="Name" UniqueName="RouteName" 
        HeaderButtonType="TextButton" HeaderStyle-Width="20%" ItemStyle-Width="20%" DataField="Name"> 
        <ItemTemplate> 
         <%# Eval("Name")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtRouteName" runat="server" Text='<%# Eval("Name")%>'></asp:TextBox> 
         <asp:RequiredFieldValidator ID="requiredRouteName" ControlToValidate="txtRouteName" 
          CssClass="validationMessage" ErrorMessage="Name is required." 
          Text="* required" runat="server" Display="Dynamic"></asp:RequiredFieldValidator> 
        </EditItemTemplate> 
       </telerik:GridTemplateColumn> 
       <telerik:GridTemplateColumn SortExpression="Comment" HeaderText="Comment" UniqueName="Comment" 
        HeaderButtonType="TextButton" DataField="Comment"> 
        <ItemTemplate> 
         <%# Eval("Comment")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtComment" TextMode="MultiLine" Rows="4" Width="250px" runat="server" Text='<%# Eval("Comment")%>'></asp:TextBox> 
        </EditItemTemplate> 
       </telerik:GridTemplateColumn> 

       <telerik:GridTemplateColumn HeaderText="Delete" AllowFiltering="false"> 
        <ItemTemplate> 
         <asp:LinkButton ID="lnkDelete" CommandName="Delete" CommandArgument=' <%# Eval("ID") %>' runat="server" OnClientClick="javascript:if (!confirm('Are you sure you want to delete route?')) { 
             return false; 
            }">Delete</asp:LinkButton> 
        </ItemTemplate> 
       </telerik:GridTemplateColumn> 
      </Columns> 
      <SortExpressions> 
       <telerik:GridSortExpression FieldName="Name"></telerik:GridSortExpression> 
      </SortExpressions> 
      <CommandItemSettings AddNewRecordText="Add New Route" ShowAddNewRecordButton="true" /> 
      <EditFormSettings> 
       <EditColumn UniqueName="EditCommandColumn1" FilterControlAltText="Filter EditCommandColumn1 column"> 
       </EditColumn> 
      </EditFormSettings> 
     </MasterTableView> 
    </telerik:RadGrid> 

그리고 rowDrop 이벤트 뒤에 코드가

protected void radGridRoutes_RowDrop(object sender, GridDragDropEventArgs e) 
    { 
     GridDataItem RowDragged = e.DraggedItems.FirstOrDefault(); 
     e.DraggedItems[0].GetDataKeyValue("DisplayOrder"); 
     int OriginalID = Convert.ToInt32(RowDragged.GetDataKeyValue("ID")); 
     int OriginalOrder = Convert.ToInt32(RowDragged.GetDataKeyValue("DisplayOrder")); 
     int RouteID = Convert.ToInt32(RowDragged.GetDataKeyValue("RouteID")); 

     int DestID = Convert.ToInt32(e.DestDataItem.GetDataKeyValue("ID")); 
     int DestOrder = Convert.ToInt32(e.DestDataItem.GetDataKeyValue("DisplayOrder")); 
     UpdateOrder(OriginalID, OriginalOrder, DestID, RouteID); 
    } 

입니다 이제 문제는 내가 중첩 된 gridTableView에서 datakeyNames에 액세스 할 수 있습니다. 나는 그것을 알아낼 수 없다. rowdrop 이벤트에서 중첩 된 gridtableview에서 ID, DisplayOrder, RouteID를 얻는 방법을 제안 해주십시오. 현재 그것은 null 값을 내게 제공하고 있습니다.

+0

부모 행을 드래그하면 해당 키를 가져올 수 없습니다. 그리드에서 자식 행을 드래그 한 경우에만 해당 값을 가져옵니다. 부모 행에서 드래그 앤 드롭을 중지하거나 서버 측 행 드롭 이벤트에서 행을 식별해야합니다. 귀하의 의견을 제공하십시오. –

+0

@ jayeshGoyani 그럼 radGird의 ClientSettings-AllowRowsDragDrop = "true"를 false로 설정하고 telerik의 경우 true로 설정해야합니다. GridTableView? 내가 그 일을하는 경우, 나는 심지어 자식 그리드의 행을 끌 수 없습니다. –

+0

나는 그 제안에 대한 코드를 제공 할 것입니다. 부모 행에서 드래그 앤 드롭을 중지해야합니다. 오직 임상가 측 또는 서버 측에서 솔루션을 원한다는 사실을 알고 싶습니다. –

답변

1

아래의 코드 스 니펫으로 시도해보십시오.

ASPX

<telerik:GridTableView Name="Child" OnRowDrop="radGridRoutes_RowDrop" ClientSettings-AllowRowsDragDrop="true" DataKeyNames="ID,DisplayOrder,RouteID" Width="100%" runat="server" CommandItemDisplay="Top" Name="Stops" AllowFilteringByColumn="false"> 

ASPX.CS

protected void radGridRoutes_RowDrop(object sender, GridDragDropEventArgs e) 
{ 
     GridDataItem RowDragged = e.DraggedItems.FirstOrDefault(); 

    if (RowDragged.OwnerTableView.Name == "Child") 
    { 
     // Row Dragged from child Grid 

      e.DraggedItems[0].GetDataKeyValue("DisplayOrder"); 
      int OriginalID = Convert.ToInt32(RowDragged.GetDataKeyValue("ID")); 
      int OriginalOrder = Convert.ToInt32(RowDragged.GetDataKeyValue("DisplayOrder")); 
      int RouteID = Convert.ToInt32(RowDragged.GetDataKeyValue("RouteID")); 

      // You can also check same thing for Drop Item 
      int DestID = Convert.ToInt32(e.DestDataItem.GetDataKeyValue("ID"));     int DestOrder = Convert.ToInt32(e.DestDataItem.GetDataKeyValue("DisplayOrder")); 
      UpdateOrder(OriginalID, OriginalOrder, DestID, RouteID); 
    } 
} 

업데이트 1 :

위의 코드는 다음 작동하지 않는 경우 아래 코드로 시도하십시오.

방법 1 :

ASPX은

<telerik:GridTableView Name="Child" ClientDataKeyNames="ID,DisplayOrder,RouteID" OnRowDrop="radGridRoutes_RowDrop" ClientSettings-AllowRowsDragDrop="true" DataKeyNames="ID,DisplayOrder,RouteID" Width="100%" runat="server" CommandItemDisplay="Top" Name="Stops" AllowFilteringByColumn="false"> 
...... 
...... 
<ClientSettings> 
    <ClientEvents OnRowDragStarted="RowDragStarted" /> 
</ClientSettings> 

JS 코드

function RowDragStarted(sender, eventArgs) { 
     var tblvew = eventArgs.get_tableView().get_name(); 
     if(tblvew == null || tblvew == undefined || tblvew != 'Child') 
     { 
      eventArgs.set_cancel(true); 
     } 
    } 
OR 

function RowDragStarted(sender, eventArgs) { 
    var route = eventArgs.getDataKeyValue("RouteID"); 
    if(route == null || route == '') 
    { 
     eventArgs.set_cancel(true); 
    } 
} 

날 경우 어떤 문제를 알려주십시오.

+0

안녕하세요, 변경했지만 아무런 차이가 없습니다. 이전처럼 RowDragged.GetDataKeyValue ("ID") 만 가져올 수 있지만 DisplayOrder 및 RouteID는 여전히 null입니다. 중첩 된 표 형태로 어떤 실수가 있습니까 ?? 이걸 도와주세요. –

+0

GridTableView에 'Name = "Child"'를 추가 했습니까? –

+0

위의 코드 조각에 클라이언트 측 솔루션도 추가했습니다. –