This question is locked. New answers and comments are not allowed.
the custom control below is working well for displaying values in the dropdown. But what it IS NOT doing is saving changes a user makes when they select an item in the dropdown. What would I have to add to achieve that? Thank you.
public
class
IWGridViewComboColumn : GridViewComboBoxColumn
{
public
String Text
{
get
{
return
(String)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public
static
readonly
DependencyProperty TextProperty = DependencyProperty.Register(
"Text"
,
typeof
(String),
typeof
(IWGridViewComboColumn),
new
PropertyMetadata(
null
));
public
IWGridViewComboColumn()
{
}
public
override
FrameworkElement CreateCellEditElement(GridViewCell cell,
object
dataItem)
{
base
.CreateCellEditElement(cell, dataItem);
var currentcontrol = cell.Content;
if
(currentcontrol !=
null
&& currentcontrol.GetType() ==
typeof
(ComboBox))
Text = ((ComboBox)currentcontrol).SelectedValue.ToString();
StackPanelWComboBox panel =
null
;
if
(
this
.DataMemberBinding !=
null
)
{
this
.BindingTarget = StackPanelWComboBox.TextProperty;
}
if
(panel ==
null
)
{
AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem;
if
(app_std_Model.Class !=
"NA"
)
{
panel =
new
StackPanelWComboBox(dataItem, ActualWidth, MinWidth);
}
}
if
(
this
.DataMemberBinding !=
null
)
{
panel.SetBinding(
this
.BindingTarget,
this
.CreateValueBinding());
}
panel.Text = Text;
return
panel
as
FrameworkElement;
}
public
override
FrameworkElement CreateCellElement(GridViewCell cell,
object
dataItem)
{
base
.CreateCellElement(cell, dataItem);
var currentcontrol = cell.Content;
StackPanelWComboBox panel =
null
;
if
(currentcontrol !=
null
)
{
panel = cell.Content
as
StackPanelWComboBox;
}
if
(
this
.DataMemberBinding !=
null
)
{
this
.BindingTarget = StackPanelWComboBox.TextProperty;
}
if
(panel ==
null
)
{
AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem;
if
(app_std_Model.Class !=
"NA"
)
//Don't even show user combobox, just leave cell blank.
{
panel =
new
StackPanelWComboBox(dataItem, 90, 90);
}
}
if
(
this
.DataMemberBinding !=
null
)
{
panel.SetBinding(
this
.BindingTarget,
this
.CreateValueBinding());
}
return
panel;
}
private
Binding CreateValueBinding()
{
var valueBinding =
new
Binding();
valueBinding.Mode = BindingMode.TwoWay;
valueBinding.NotifyOnValidationError =
true
;
valueBinding.ValidatesOnExceptions =
true
;
valueBinding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
valueBinding.Path =
new
PropertyPath(
this
.DataMemberBinding.Path.Path);
return
valueBinding;
}
public
override
void
CopyPropertiesFrom(GridViewColumn source)
{
base
.CopyPropertiesFrom(source);
var gridViewEasyEntryTextColumn = source
as
IWGridViewComboColumn;
if
(gridViewEasyEntryTextColumn !=
null
)
{
this
.Text = gridViewEasyEntryTextColumn.Text;
}
}
public
override
IList<ValidationError> UpdateSourceWithEditorValue(GridViewCell gridViewCell)
{
List<ValidationError> errors =
new
List<ValidationError>();
StackPanelWComboBox editor = gridViewCell.GetEditingElement()
as
StackPanelWComboBox;
BindingExpression bindingExpression = editor.ReadLocalValue(StackPanelWComboBox.TextProperty)
as
BindingExpression;
if
(bindingExpression !=
null
)
{
bindingExpression.UpdateSource();
errors.AddRange(Validation.GetErrors(editor));
}
return
errors;
}
public
override
object
GetNewValueFromEditor(
object
editor)
{
StackPanelWComboBox panel = editor
as
StackPanelWComboBox;
if
(panel !=
null
)
{
panel.Text = panel.tb.SelectedValue.ToString();
return
panel.tb.SelectedValue.ToString();
}
else
{
return
null
;
}
}
}
}
public
class
StackPanelWComboBox : StackPanel
{
public
ComboBox tb =
null
;
//public Button button = null;
#region Dependency Properties
/// <summary>
/// End ShowLabel Begin Click
/// </summary>
public
static
readonly
DependencyProperty
ClickProperty = DependencyProperty.Register(
"Click"
,
// property name
typeof
(RoutedEventHandler),
// type of property
typeof
(StackPanelWComboBox),
// type of provider
new
PropertyMetadata(ClickChanged));
// Callback invoked on property value has changes.
public
RoutedEventHandler Click
{
get
{
return
(RoutedEventHandler)GetValue(ClickProperty); }
set
{ SetValue(ClickProperty, value); }
}
private
static
void
ClickChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
/// <summary>
/// End Click Begin Text
/// </summary>
public
static
readonly
DependencyProperty
TextProperty = DependencyProperty.Register(
"Text"
,
//property name
typeof
(String),
//type of property
typeof
(StackPanelWComboBox),
//type of provider
new
PropertyMetadata(TextChanged));
//Callback invoked on property value has changes.
public
String Text
{
get
{
return
(String)GetValue(TextProperty); }
set
{ SetValue(TextProperty, value); }
}
private
static
void
TextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
StackPanelWComboBox sh = (StackPanelWComboBox)d;
if
(sh.tb ==
null
|| e.NewValue ==
null
)
return
;
sh.tb.SelectedValue = e.NewValue.ToString();
}
/// <summary>
/// end text
/// </summary>
#endregion
public
object
CommandParameter
{
set
{
if
(tb ==
null
)
return
;
tb.Tag = value;
}
get
{
if
(tb ==
null
)
return
null
;
return
tb.Tag;
}
}
public
StackPanelWComboBox()
{
}
public
StackPanelWComboBox(
object
dataItem,
double
width,
double
minwidth)
{
createContents(dataItem, width, minwidth);
}
public
List<EMC_Class> ABCD
{
get
{
List<EMC_Class> lst =
new
List<EMC_Class>();
try
{
foreach
(var x
in
new
EMC_Class[]
{
new
EMC_Class { ClassID = 0, ClassName =
"A"
},
new
EMC_Class { ClassID = 1, ClassName =
"B"
},
new
EMC_Class { ClassID = 2, ClassName =
"C"
},
new
EMC_Class { ClassID = 3, ClassName =
"D"
}
})
{
lst.Add(x);
}
return
lst;
}
catch
(Exception ex)
{
throw
;
}
return
lst;
}
}
public
List<EMC_Class> AB
{
get
{
List<EMC_Class> lst =
new
List<EMC_Class>();
try
{
foreach
(var x
in
new
EMC_Class[]
{
new
EMC_Class { ClassID = 0, ClassName =
"A"
},
new
EMC_Class { ClassID = 1, ClassName =
"B"
},
})
{
lst.Add(x);
}
return
lst;
}
catch
(Exception ex)
{
throw
;
}
return
lst;
}
}
public
List<EMC_Class> NA
{
get
{
List<EMC_Class> lst =
new
List<EMC_Class>();
try
{
foreach
(var x
in
new
EMC_Class[]
{
new
EMC_Class { ClassID = 0, ClassName =
" "
},
})
{
lst.Add(x);
}
return
lst;
}
catch
(Exception ex)
{
throw
;
}
return
lst;
}
}
public
class
EMC_Class
{
public
int
ClassID {
get
;
set
; }
public
string
ClassName {
get
;
set
; }
}
public
void
createContents(
object
dataItem,
double
width,
double
minwidth)
{
Children.Clear();
Orientation = Orientation.Horizontal;
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
tb =
new
ComboBox();
tb.Width = width;
tb.MinWidth = width;
AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem;
if
(app_std_Model.ClassUserSelected !=
null
)
{
tb.DisplayMemberPath =
"ClassName"
;
tb.SelectedValuePath =
"ClassUserSelected"
;
tb.SelectedValue = app_std_Model.ClassUserSelected;
}
switch
(app_std_Model.Class)
{
case
"NA"
:
tb.ItemsSource = NA;
break
;
case
"A or B"
:
tb.ItemsSource = AB;
break
;
case
"A, B, C, D"
:
tb.ItemsSource = ABCD;
break
;
}
Children.Add(tb);
}
}