Explorar o código

Fix to setting selected rows of datagrid when ordering by a column.

Kenric Nugteren hai 1 ano
pai
achega
73e767ff8e
Modificáronse 1 ficheiros con 25 adicións e 16 borrados
  1. 25 16
      inabox.wpf/DynamicGrid/DynamicGrid.cs

+ 25 - 16
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -1240,35 +1240,44 @@ namespace InABox.DynamicGrid
             //Logger.Send(LogType.Information, ClientFactory.UserID, String.Format("{0}: GetSelectedRows({1})", this.GetType().EntityName(), DataGrid.SelectedItems.Count));
             var result = new List<CoreRow>();
             foreach (var item in DataGrid.SelectedItems)
+            {
                 if (item is CoreRow)
                 {
                     //result.Add(item as CoreRow);
                 }
-                else
+                else if (item is DataRowView datarow)
                 {
-                    var datarow = item as DataRowView;
-                    if (datarow != null)
-                    {
-                        var row = datarow.Row.Table.Rows.IndexOf(datarow.Row);
-                        result.Add(Data.Rows[row]);
-                    }
+                    var row = datarow.Row.Table.Rows.IndexOf(datarow.Row);
+                    result.Add(Data.Rows[row]);
                 }
+            }
 
             return result.ToArray();
         }
 
         private void SetSelectedRows(CoreRow[] rows)
-        {
-            //Logger.Send(LogType.Information, ClientFactory.UserID, String.Format("{0}: SetSelectedRows({1})", this.GetType().EntityName(), rows.Length));
-            //   CoreTableAdapter<T> adapter = (CoreTableAdapter<T>)DataGrid.ItemsSource;             
+        {           
             DataGrid.SelectedItems.Clear();
-            var bFirst = true;
-            foreach (var row in rows.Where(x => x.Index > -1))
+
+            var table = DataGridItems;
+            if(table is null) return;
+
+            var dataRows = rows.Where(x => x.Index > -1).Select(row =>
+            {
+                return table.Rows[row.Index];
+            });
+            if (!HasOption(DynamicGridOption.MultiSelect))
+            {
+                dataRows = dataRows.Take(1);
+            }
+
+            foreach (var row in dataRows)
             {
-                //DataTable table = (DataTable)DataGrid.ItemsSource;
-                if (bFirst || HasOption(DynamicGridOption.MultiSelect))
-                    DataGrid.SelectedItems.Add(DataGrid.GetRecordAtRowIndex(row.Index + (HasOption(DynamicGridOption.FilterRows) ? 2 : 1)));
-                bFirst = false;
+                var record = DataGrid.View.Records.FirstOrDefault(x => (x.Data as DataRowView)!.Row == row);
+                if(record?.Data is DataRowView rowView)
+                {
+                    DataGrid.SelectedItems.Add(rowView);
+                }
             }
         }