我想在我的解决方案中在ObservableCollection 中转换DataTable而不需要特定的类。 (stackoverflow.com中的所有其他解决方案都是特定的类。)
原因是DataTable表示存储过程结果,并且将来我想更改存储过程结果而不对应用程序进行任何更改。
我无法直接绑定我的DataBale,因为我在ModelView端使用Filter,如果我一起使用DataTable和Filter,我会遇到异常。
有什么想法吗?
由于
目标是拥有相同的代码,但没有BO.Line对象。
static public ObservableCollection<BO.Line> GetValues()
{
DataTable _dataTable = DAL.ExecuteStoredProcedure(GetStoredProcedureNameInAppConfig());
ObservableCollection<BO.Line> _list = new ObservableCollection<BO.Line>();
foreach (DataRow _dataRow in _dataTable.Rows)
{
_list.Add(new BO.Line() { Instrument = _dataRow["Instrument"].ToString(),
Crystal = _dataRow["Crystal"].ToString() });
}
return _list;
}
在此示例中:
GetStoredProcedureNameInAppConfig() //return "GetLines"
但我想更改我的App.config(不重新编译我的应用程序):
GetStoredProcedureNameInAppConfig() //return "GetPerson"
“GetLines”存储过程返回:
Instrument | Crystal
______________________
Instr1 | Crystal1
Instr1 | Crystal2
Instr2 | Crystal1
“GetPerson”存储过程返回:
FirstName | LastName | Language
_______________________________
Alex | Doe | ENG
Britt | Nillis | ENG
Carlo | Petro | FR
恢复
我想在“泛型”ObservableCollection中转换DataTable(带有变量结构)。 没有具体的课程。
(ObservableCollection对我来说不是好办法。)
谢谢
答案 0 :(得分:2)
此解决方案适用于WPF绑定和过滤。
Thank you to http://paulstovell.com/
public class GenericObject
{
private readonly ObservableCollection<GenericProperty> properties = new ObservableCollection<GenericProperty>();
public GenericObject(params GenericProperty[] properties)
{
foreach (var property in properties)
Properties.Add(property);
}
public ObservableCollection<GenericProperty> Properties
{
get { return properties; }
}
}
public class GenericProperty : INotifyPropertyChanged
{
public GenericProperty(string name, object value)
{
Name = name;
Value = value;
}
public string Name { get; private set; }
public object Value { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
private static ObservableCollection<GenericObject> Convert(DataTable toConvert)
{
ObservableCollection<GenericObject> _result = new ObservableCollection<GenericObject>();
foreach (DataRow _row in toConvert.Rows)
{
GenericObject _genericObject = new GenericObject();
foreach (DataColumn _column in toConvert.Columns)
{
_genericObject.Properties.Add(new GenericProperty(_column.ColumnName,_row[_column]));
}
_result.Add(_genericObject);
}
return _result;
}
谢谢大家的帮助。