private void UpdatePOSelection()
        {
            var allPOsList        = (List <usp_GetPurchaseOrderList_Result>)ObjectDataSourcePOs.Select();
            var selectedPONumbers = PurchaseOrdersGrid.GetSelectedFieldValues(PurchaseOrdersGrid.KeyFieldName);

            _selectedPOs.Clear();
            _selectedPOs.AddRange(allPOsList.Where(p => selectedPONumbers.Any(sp => (int)sp == p.PurchaseOrderNumber)).ToList());
            //SelectedPurchaseOrdersGrid.DataSource = _selectedPOs;
            //SelectedPurchaseOrdersGrid.DataBind();
        }
        //private void SelectChild(int parent, int child)
        //{
        //    var childRowCount = PurchaseOrdersGrid.GetChildRowCount(parent);
        //    PurchaseOrdersGrid.
        //}

        protected void Grid_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Group)
            {
                return;
            }
            var checkBox = (ASPxCheckBox)PurchaseOrdersGrid.FindGroupRowTemplateControl(e.VisibleIndex, "groupCheckBox");

            checkBox.Checked = GetChecked(e.VisibleIndex);
        }
 protected bool GetChecked(int visibleIndex)
 {
     for (int i = 0; i < PurchaseOrdersGrid.GetChildRowCount(visibleIndex); i++)
     {
         bool isRowSelected = PurchaseOrdersGrid.Selection.IsRowSelectedByKey(
             ((usp_GetPurchaseOrderList_Result)PurchaseOrdersGrid.GetChildRow(visibleIndex, i)).PurchaseOrderNumber);
         if (!isRowSelected)
         {
             return(false);
         }
     }
     return(true);
 }
        protected void PurchaseOrdersGrid_OnSelectionChanged(object sender, EventArgs e)
        {
            return;

            var allPOsList        = (List <usp_GetPurchaseOrderList_Result>)ObjectDataSourcePOs.Select();
            var selectedPONumbers = PurchaseOrdersGrid.GetSelectedFieldValues(PurchaseOrdersGrid.KeyFieldName);

            _selectedPOs = allPOsList.Where(p => selectedPONumbers.Any(sp => (int)sp == p.PurchaseOrderNumber)).ToList();
            //foreach (var selectedPONumber in PurchaseOrdersGrid.GetSelectedFieldValues(PurchaseOrdersGrid.KeyFieldName))
            //{

            //    //var selectedPO = PurchaseOrdersGrid.GetRow(PurchaseOrdersGrid.Get);

            //}
            //var x = PurchaseOrdersGrid.Selection.Count;
            //SelectedPurcaseOrderCount.Text = x.ToString();

            SelectedPurchaseOrdersGrid.DataSource = _selectedPOs;
        }
        protected void Grid_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
        {
            var parameters         = e.Parameters.Split(';');
            var index              = int.Parse(parameters[0]);
            var fieldName          = parameters[1];
            var isGroupRowSelected = bool.Parse(parameters[2]);

            System.Collections.ObjectModel.ReadOnlyCollection <GridViewDataColumn> groupedCols = PurchaseOrdersGrid.GetGroupedColumns();

            if (groupedCols[groupedCols.Count - 1].FieldName == fieldName)
            {
                //  Check groupcolumn is the lowest level group column.

                PurchaseOrdersGrid.ExpandRow(index, true); // ensures consistent behavior
                for (int i = 0; i < PurchaseOrdersGrid.GetChildRowCount(index); i++)
                {
                    var row = (usp_GetPurchaseOrderList_Result)PurchaseOrdersGrid.GetChildRow(index, i);
                    PurchaseOrdersGrid.Selection.SetSelectionByKey(row.PurchaseOrderNumber, isGroupRowSelected);
                }
            }
            else
            {
                //  Checked row is not the lowest group column.   Recursively iterate (requires row expansion).
                int gidx = -1;
                foreach (var gcol in groupedCols)
                {
                    if (gcol.FieldName == fieldName)
                    {
                        gidx = groupedCols.IndexOf(gcol);
                        break;
                    }
                }

                var    checkedDataRow            = (usp_GetPurchaseOrderList_Result)PurchaseOrdersGrid.GetRow(index);
                var    parentFieldnameValuesDict = new Dictionary <string, object>();
                string parentFieldName;
                object parentKeyValue;
                for (int i = gidx; i >= 0; i--)
                {
                    var pcol = groupedCols[i];
                    parentFieldName = pcol.FieldName;
                    parentKeyValue  = GetPropValue(checkedDataRow, parentFieldName);
                    parentFieldnameValuesDict.Add(parentFieldName, parentKeyValue);
                }

                bool isRowChildOfClickedGroup;
                PurchaseOrdersGrid.ExpandRow(index, true);
                for (int i = 0; i <= PurchaseOrdersGrid.VisibleRowCount - 1; i++)
                {
                    var row = (usp_GetPurchaseOrderList_Result)PurchaseOrdersGrid.GetRow(i);

                    isRowChildOfClickedGroup = true;
                    //  Check if row belongs to checked group.
                    foreach (var kvp in parentFieldnameValuesDict)
                    {
                        parentFieldName = kvp.Key;
                        parentKeyValue  = kvp.Value;
                        if (GetPropValue(row, parentFieldName).Equals(parentKeyValue) == false)
                        {
                            isRowChildOfClickedGroup = false;
                            break;
                        }
                    }

                    if (isRowChildOfClickedGroup)
                    {
                        //  Row meets all criteria for belonging to the clicked group, change selected state.
                        PurchaseOrdersGrid.Selection.SetSelectionByKey(row.PurchaseOrderNumber, isGroupRowSelected);
                    }
                }
            }
            UpdatePOSelection();
        }