def add_property_grid_widget(self, part_instance, max_height=None, custom_title=False, show_headers=True,
                                 show_columns=None):
        height = max_height
        if isinstance(part_instance, Part):
            part_instance_id = part_instance.id
        elif isinstance(part_instance, text_type) and is_uuid(part_instance):
            part_instance_id = part_instance
            part_instance = self._client.part(id=part_instance_id)
        else:
            raise IllegalArgumentError("When using the add_property_grid_widget, part_instance must be a "
                                       "Part or Part id. Type is: {}".format(type(part_instance)))
        if not show_columns:
            show_columns = list()
        possible_columns = [ShowColumnTypes.DESCRIPTION, ShowColumnTypes.UNIT]
        display_columns = dict()
        for possible_column in possible_columns:
            if possible_column in show_columns:
                display_columns[possible_column] = True
            else:
                display_columns[possible_column] = False
        config = {
            "xtype": ComponentXType.PROPERTYGRID,
            "category": Category.INSTANCE,
            "filter": {
                "activity_id": str(self.activity.id),
                "part": part_instance_id
            },
            "hideHeaders": not show_headers,
            "viewModel": {
                "data": {
                    "displayColumns": display_columns
                }
            },
        }
        if height:
            config['height'] = height
        if custom_title is False:
            show_title_value = "Default"
            title = part_instance.name
        elif custom_title is None:
            show_title_value = "No title"
            title = str()
        else:
            show_title_value = "Custom title"
            title = str(custom_title)
        config["title"] = title
        config["showTitleValue"] = show_title_value
        meta = {
            "activityId": str(self.activity.id),
            "customHeight": height if height else None,
            "customTitle": title,
            "partInstanceId": part_instance_id,
            "showColumns": show_columns,
            "showHeaders": show_headers,
            "showHeightValue": "Set height" if height else "Automatic height",
            "showTitleValue": show_title_value
        }
        self._add_widget(dict(config=config, meta=meta, name=WidgetNames.PROPERTYGRIDWIDGET))