<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def onDragSelection(self, event):
 """ Set self.df_slice based on user's selection """

        if self.grid.GetSelectionBlockTopLeft():
            #top_left = self.grid.GetSelectionBlockTopLeft()
            #bottom_right = self.grid.GetSelectionBlockBottomRight()
            # awkward hack to fix wxPhoenix memory problem, (Github issue #221)
            bottom_right = eval(repr(self.grid.GetSelectionBlockBottomRight()).replace("GridCellCoordsArray: ", "").replace("GridCellCoords", ""))
            top_left = eval(repr(self.grid.GetSelectionBlockTopLeft()).replace("GridCellCoordsArray: ", "").replace("GridCellCoords", ""))
            #
            top_left = top_left[0]
            bottom_right = bottom_right[0]
        else:
            return
        # GetSelectionBlock returns (row, col)
        min_col = top_left[1]
        max_col = bottom_right[1]
        min_row = top_left[0]
        max_row = bottom_right[0]
        self.df_slice = self.contribution.tables[self.grid_type].df.iloc[min_row:max_row+1, min_col:max_col+1]