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