private void FillScreen()
        {
            if (cmbAction.SelectedIndex >= 0)
            {
                _currentAction = _listActionClones[cmbAction.SelectedIndex];
                txtName.Text = _currentAction.Name;
                txtCaption.Text = _currentAction.Caption;
                chkCaptionIsMdx.Checked = _currentAction.CaptionIsMdx;
                txtDescription.Text = NormalizeLineBreaks(_currentAction.Description);
                txtCondition.Text = NormalizeLineBreaks(_currentAction.Condition);
                cmbActionType.SelectedItem = _currentAction.Type.ToString();
                cmbTargetType.SelectedItem = _currentAction.TargetType.ToString();

                if (_currentAction.Target != null && !cmbTarget.Items.Contains(_currentAction.Target))
                    cmbTarget.Items.Add(_currentAction.Target);
                cmbTarget.SelectedItem = _currentAction.Target;
                cmbTarget_SelectedIndexChanged(null, null);

                cmbInvocation.SelectedItem = _currentAction.Invocation.ToString();

                foreach (Perspective perspective in cube.Perspectives)
                {
                    for (int i = 0; i < listPerspectives.Items.Count; i++)
                    {
                        if ((string)listPerspectives.Items[i] == perspective.Name)
                        {
                            bool bChecked = false;
                            if (_dictActionPerspectives.ContainsKey(_currentAction.ID))
                                bChecked = (new List<string>(_dictActionPerspectives[_currentAction.ID])).Contains(perspective.Name);
                            listPerspectives.SetItemChecked(i, bChecked);
                        }
                    }
                }

                if (_currentAction is StandardAction)
                {
                    StandardAction action = (StandardAction)_currentAction;
                    txtExpression.Text = NormalizeLineBreaks(action.Expression);
                }
                else
                {
                    txtExpression.Text = string.Empty;
                }

                if (_currentAction is DrillThroughAction)
                {
                    DrillThroughAction action = (DrillThroughAction)_currentAction;
                    _listDrillthroughColumns = new List<TabularActionsEditorPlugin.DrillthroughColumn>();
                    foreach (Microsoft.AnalysisServices.Binding binding in action.Columns)
                    {
                        CubeAttributeBinding cubeAttributeBinding = binding as CubeAttributeBinding;
                        if (cubeAttributeBinding == null) continue;
                        CubeDimension cd = cube.Dimensions.Find(cubeAttributeBinding.CubeDimensionID);
                        if (cd == null) continue;
                        DimensionAttribute a = cd.Dimension.Attributes.Find(cubeAttributeBinding.AttributeID);
                        if (a == null) continue;
                        TabularActionsEditorPlugin.DrillthroughColumn col = new TabularActionsEditorPlugin.DrillthroughColumn();
                        col.CubeDimension = cd.Name;
                        col.Attribute = a.Name;
                        _listDrillthroughColumns.Add(col);
                    }
                    this.drillthroughColumnBindingSource.DataSource = _listDrillthroughColumns;
                    dataGridViewDrillthroughColumns.DataSource = drillthroughColumnBindingSource;
                    dataGridViewDrillthroughColumns.Refresh();

                    cmbDefault.SelectedItem = (action.Default ? "True" : "False");
                    txtMaxRows.Text = (action.MaximumRows <= 0 ? string.Empty : action.MaximumRows.ToString());
                }
                else
                {
                    _listDrillthroughColumns = new List<TabularActionsEditorPlugin.DrillthroughColumn>();
                    this.drillthroughColumnBindingSource.DataSource = _listDrillthroughColumns;
                    dataGridViewDrillthroughColumns.DataSource = drillthroughColumnBindingSource;
                    dataGridViewDrillthroughColumns.Refresh();
                }

                if (_currentAction is ReportAction)
                {
                    ReportAction ra = (ReportAction)_currentAction;
                    _listReportParameters = new List<ReportParameter>();

                    foreach (ReportParameter rp in ra.ReportFormatParameters)
                    {
                        if (string.Compare(rp.Name, "rs:Command", true) != 0) //rs:Command=Render must be put in ReportFormatParameters or else the action won't work... probably a bug in SSAS... so assume it and don't show it in the UI
                        {
                            _listReportParameters.Add(rp);
                        }
                    }
                    foreach (ReportParameter rp in ra.ReportParameters)
                    {
                        _listReportParameters.Add(rp);
                    }

                    reportParameterBindingSource.DataSource = _listReportParameters;
                    dataGridViewReportParameters.DataSource = reportParameterBindingSource;
                    dataGridViewReportParameters.Refresh();

                    txtReportServer.Text = ra.ReportServer;
                    txtMaxRows.Text = ra.Path; //using this as ReportPath also
                }
                else
                {
                    _listReportParameters = new List<ReportParameter>();
                    reportParameterBindingSource.DataSource = _listReportParameters;
                    dataGridViewReportParameters.DataSource = reportParameterBindingSource;
                    dataGridViewReportParameters.Refresh();

                    txtReportServer.Text = string.Empty;

                    if (!(_currentAction is DrillThroughAction))
                    {
                        txtMaxRows.Text = string.Empty; //using this as ReportPath also
                    }
                }

            }
            else
            {
                txtName.Text = string.Empty;
                txtCaption.Text = string.Empty;
                chkCaptionIsMdx.Checked = false;
                txtDescription.Text = string.Empty;
                cmbActionType.SelectedItem = -1;
                cmbTargetType.SelectedItem = -1;
                cmbTarget.SelectedIndex = -1;
                cmbDefault.SelectedIndex = -1;
                txtMaxRows.Text = string.Empty;

                _listDrillthroughColumns = new List<TabularActionsEditorPlugin.DrillthroughColumn>();
                drillthroughColumnBindingSource.DataSource = _listDrillthroughColumns;
                dataGridViewDrillthroughColumns.DataSource = drillthroughColumnBindingSource;
                dataGridViewDrillthroughColumns.Refresh();

                _listReportParameters = new List<ReportParameter>();
                reportParameterBindingSource.DataSource = _listReportParameters;
                dataGridViewReportParameters.DataSource = reportParameterBindingSource;
                dataGridViewReportParameters.Refresh();
            }
        }
        private void btnDrillthroughDefault_Click(object sender, EventArgs e)
        {
            SaveAction();

            _listDrillthroughColumns = new List<TabularActionsEditorPlugin.DrillthroughColumn>();

            MeasureGroup mg = null;
            foreach (MeasureGroup mg2 in cube.MeasureGroups)
            {
                if (_currentAction.Target == "MeasureGroupMeasures(\"" + mg2.Name + "\")")
                {
                    mg = mg2;
                    break;
                }
            }

            if (mg != null)
            {
                List<string> relatedTables = GetRelatedTables(cube.Parent.Dimensions.GetByName(mg.Name), mg);
                relatedTables.Add(mg.Name);
                relatedTables.Sort();

                foreach (string sTable in relatedTables)
                {
                    CubeDimension cd = cube.Dimensions.GetByName(sTable);
                    if (cd == null) continue;

                    foreach (Microsoft.AnalysisServices.DimensionAttribute a in cd.Dimension.Attributes)
                    {
                        if (a.Type != AttributeType.RowNumber) //RowNumber was not supposed to return in drillthrough commands but was at RTM due to a bug
                        {
                            TabularActionsEditorPlugin.DrillthroughColumn col = new TabularActionsEditorPlugin.DrillthroughColumn();
                            col.CubeDimension = cd.Name;
                            col.Attribute = a.Name;
                            _listDrillthroughColumns.Add(col);
                        }
                    }
                }

                this.dataGridViewDrillthroughColumns.EndEdit();
                this.drillthroughColumnBindingSource.DataSource = _listDrillthroughColumns;
                dataGridViewDrillthroughColumns.DataSource = drillthroughColumnBindingSource;
                dataGridViewDrillthroughColumns.Refresh();
            }
            else
            {
                return;
            }
        }