vendredi 13 octobre 2017

WebControls Datagrid AutoGeneratingColumn

I have an Desktop Application in which I'm using a System.Windows.Controls.Datagrid. In the App I use AutoGenerateColumns = true, and step into the DataGrid_AutoGeneratingColumn event to handle the headers and some other things. This works all fine for the App.

Now I want to create pretty much the same for the Web, but the System.Web.UI.WebControls.Datagrid deosn't have this event, so how could I get this to work the same way?

Also is it possible to create RowDetails with the Webversion of the DataGrid?

I would like to rebuild like the sample code from the App:

public static DataGrid AddDataGrid(string name, System.Data.DataSet ds, UIElement parent, bool isReadOnly, bool addRowDetails = false)
    {
        try
        {
            DataGrid dg = new DataGrid();
            dg.Name = "DataGrid__" + name;
            dg.HorizontalAlignment = HorizontalAlignment.Left;
            dg.VerticalAlignment = VerticalAlignment.Top;
            dg.Margin = (tagName == "SubGrid") ? new Thickness(5, 5, 5, 10) : new Thickness(10, 0, 0, 0);
            dg.AutoGenerateColumns = true;
            dg.Style = TriggerStyleUtility.CreateStyle<DataGrid>(DataGrid.AlternatingRowBackgroundProperty, Brushes.LightSkyBlue);
            dg.AlternationCount = 2;

            dg.ItemsSource = ds.Tables[0].DefaultView;

            dg.Visibility = Visibility.Visible;
            dg.IsReadOnly = isReadOnly;
            dg.CanUserAddRows = false;
            dg.CanUserDeleteRows = SprocEvaluator.UserCanDeleteRows(name);

            //set events
            if (SprocEvaluator.EvaluateMoneySproc(name))
            {
                dg.AutoGeneratingColumn += MoneyDataGrid_AutoGeneratingColumn;
            }
            else if(SprocEvaluator.EvaluatePercentSproc(name))
            {
                dg.AutoGeneratingColumn += PercentDataGrid_AutoGeneratingColumn;
            }
            else if (SprocEvaluator.EvaluateSpecialSproc(name))
            {
                dg.AutoGeneratingColumn += SpecialDataGrid_AutoGeneratingColumn ;
            }
            else
            {
                dg.AutoGeneratingColumn += DataGrid_AutoGeneratingColumn;
            }

             //enable and set RowDetails, and events
            if (ds.Tables[0].Rows.Count > 0 && addRowDetails)
            {
                //set event for Cell selection changed (triggers when selected row changes)
                dg.SelectedCellsChanged += DataGrid_SelectedCellsChanged;

                //add event when cell is clicked (triggers on each cell)
                Style st = new Style(typeof(DataGridCell));
                st.Setters.Add(new EventSetter(DataGridCell.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(DataGrid_SelectCellColumnChanged)));
                dg.CellStyle = st;

                //add event for select row changes (used to bring focus to SubGrid)
                st = new Style(typeof(DataGridRow));
                st.Setters.Add(new EventSetter(DataGridRow.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(DataGrid_SelectRowDetails)));
                dg.RowStyle = st;

                //create default Template for RowDetails
                DataGridExtension.CreateRowDetailsTemplate(dg);
            }        

            return dg;

            }
        catch (Exception ex)
        {                
            return null;
        }
    }     


//autogenerate the columns bind the appropriate ValueConverter to the columns
    public static void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        try
        {
            DataGrid dg = (DataGrid)sender;
            e.Column.Header = Helper.TagConverter(e.Column.Header.ToString());

            List<object> tmpList = (dg.DataContext != null) ? (List<object>)dg.DataContext : null;

            if (tmpList.Count == 1)

            //add column with checkbox item as first
            if (tmpList.Count == 1) // && dg.Tag.ToString() == "")
            {
                if (!SprocEvaluator.ExcludeExport(Helper.GetName(dg.Name, "__")))
                {
                    DataGridExtension.AddGridColumn(dg, "Export", "", new FrameworkElementFactory(typeof(CheckBox)), new GridValueConverter(), "CheckBox", 0);
                    tmpList.Add("ExportSet");
                    dg.DataContext = tmpList;
                }                    
            }

            //add colunmn "Position" (EffortScore TabItems)
            if (e.Column.Header.ToString() == "Rank Change")
            {
                DataGridExtension.AddGridColumn(dg, "Position", e.PropertyName, new FrameworkElementFactory(typeof(Image)), new GridImageConverter(), "Image", dg.Columns.Count);
            }

            //set appropriate DataType item and converter
            if (e.PropertyType == typeof(bool))  
            {
                DataGridCheckBoxColumn col = e.Column as DataGridCheckBoxColumn;
                col.Binding = (SprocEvaluator.SetTwoWayBinding(Helper.GetName(dg.Name, "__"))) ? ControlUtility.CreateBinding(e.PropertyName, null, BindingMode.TwoWay) : ControlUtility.CreateBinding(e.PropertyName);                    
            }
            else
            {
                DataGridBoundColumn col = e.Column as DataGridBoundColumn;
                if (col != null && !Helper.SkipColumn(e.Column.Header.ToString()))
                {
                    if (dg.Tag.ToString() == "") 
                    {
                        if (e.Column.Header.ToString().Contains("%") || e.Column.Header.ToString().Contains("_Percent"))
                        {
                            e.Column.Header = (!e.Column.Header.ToString().Contains("%")) ? e.Column.Header.ToString().Replace("_Percent", "_%") : e.Column.Header.ToString();
                            col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridPercentConverter());
                        }
                        else
                        {
                            if (Helper.GetName(dg.Name, "__") == "sp_Client_Invoices" || Helper.GetName(dg.Name, "__") == "sp_Client_Invoice_Count")
                            {                                    
                                col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridAccountingConverter());
                            }
                            else
                            {
                                col.Binding = (SprocEvaluator.SetTwoWayBinding(Helper.GetName(dg.Name, "__"))) ? ControlUtility.CreateBinding(e.PropertyName, new GridValueConverter(), BindingMode.TwoWay) : ControlUtility.CreateBinding(e.PropertyName, new GridValueConverter());
                            }                                
                        }                            
                    }
                    else
                    {
                        if (e.Column.Header.ToString() == "Datum" || e.Column.Header.ToString() == "LastFundingDatum") col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridDateConverter());
                        if (e.Column.Header.ToString() == "LetzterCall") col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridLongDateConverter());
                        if (e.Column.Header.ToString() == "Zeit") col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridTimeConverter());
                        if (e.Column.Header.ToString() == "NextMeeting") col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridDateConverter());
                        if (Helper.IsMoneyColumn(e.Column.Header.ToString())) col.Binding = ControlUtility.CreateBinding(e.PropertyName, new GridNumValueConverter());
                    }
                }
            }
        }
        catch (Exception ex)
        {
            FileLogger.HandleError("", false, true, "Error (DataGridUtility, DataGrid_AutoGeneratingColumn): " + Environment.NewLine + ex.Message, App._LogFilePath, App._LogFileName);
        }
    }           




Aucun commentaire:

Enregistrer un commentaire