Commit d17b0a44 authored by 潘栩锋's avatar 潘栩锋 🚴
parents 6fb9b493 556f69da
...@@ -202,9 +202,9 @@ ...@@ -202,9 +202,9 @@
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<Button Style="{StaticResource ButtonStyle_empty}" Background="{Binding Background}" Tag="{Binding .}" Click="button_componentNew_Click" Margin="5" BorderBrush="#FF0C0C0C"> <Button Style="{StaticResource ButtonStyle_empty}" Background="{Binding Background}" Tag="{Binding .}" Click="button_componentNew_Click" Margin="5" BorderBrush="#FF0C0C0C">
<StackPanel Orientation="Vertical" Margin="10"> <StackPanel Margin="10">
<TextBlock Text="{Binding Header}" FontSize="20" TextWrapping = "Wrap" /> <TextBlock Text="{Binding Header}" FontSize="18" TextWrapping = "Wrap" />
<TextBlock Text="{Binding Count}" FontSize="15" Margin="0,20,0,0"/> <TextBlock Text="{Binding Count}" FontSize="12" Margin="0,20,0,0"/>
</StackPanel> </StackPanel>
</Button> </Button>
</DataTemplate> </DataTemplate>
......
...@@ -6,29 +6,36 @@ using System.Windows.Data; ...@@ -6,29 +6,36 @@ using System.Windows.Data;
namespace FLY.ControlLibrary.Converter namespace FLY.ControlLibrary.Converter
{ {
/// <summary> public class RatioConverter : IMultiValueConverter
/// 3个输入,
/// [0]比例分子;
/// [1]比例分母;
/// [2]控件最大长度
/// </summary>
public class RatioConverter: IMultiValueConverter
{ {
#region IMultiValueConverter 成员 #region IMultiValueConverter 成员
double getValue(object value)
{
if ((value is int) && (!Misc.MyBase.ISVALIDATA((int)value)))
return 0;
try
{
return System.Convert.ToDouble(value);
}
catch
{
return 0;
}
}
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
if (values.Length == 3 && (values[0] is int) && (values[1] is int) && (values[2] is double))//必须要检查,不然 界面生成器 会错误,提示转换异常 if (values.Length != 3) //必须要检查,不然 界面生成器 会错误,提示转换异常
{ {
double ratio ; return 100;
int value = (int)values[0]; }
if (value == 99999998)
value = 0;
int max = (int)values[1];
double ActualWidth = (double)values[2];
double ratio;
double value = getValue(values[0]);
double max = getValue(values[1]);
double ActualWidth = getValue(values[2]);
if(max <=0) if (max <= 0)
ratio = 0; ratio = 0;
else else
ratio = (double)value / max; ratio = (double)value / max;
...@@ -37,14 +44,8 @@ namespace FLY.ControlLibrary.Converter ...@@ -37,14 +44,8 @@ namespace FLY.ControlLibrary.Converter
ratio = 0; ratio = 0;
else if (ratio > 1) else if (ratio > 1)
ratio = 1; ratio = 1;
return ActualWidth * ratio; return ActualWidth * ratio;
} }
else
{
return 100;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{ {
......
...@@ -349,8 +349,8 @@ namespace FlyADBase ...@@ -349,8 +349,8 @@ namespace FlyADBase
ID, ID,
FLYAD7_OBJ_INTERFACE.FLYIO_OBJ_INTERFACE.GET_IO); FLYAD7_OBJ_INTERFACE.FLYIO_OBJ_INTERFACE.GET_IO);
NotifyPropertyChanged("Pos1LCShift");//写入到AD盒 NotifyPropertyChanged(nameof(Pos1LCShift));//写入到AD盒
NotifyPropertyChanged("Pos2Comp");//写入到AD盒 NotifyPropertyChanged(nameof(Pos2Comp));//写入到AD盒
SyncPos2Clear(); SyncPos2Clear();
SyncClear(); SyncClear();
...@@ -516,12 +516,12 @@ namespace FlyADBase ...@@ -516,12 +516,12 @@ namespace FlyADBase
Array.Copy(pack.code, Code, pack.code.Length); Array.Copy(pack.code, Code, pack.code.Length);
Code[6] = 0x06; Code[6] = 0x06;
NotifyPropertyChanged("Code"); NotifyPropertyChanged(nameof(Code));
Surplus = pack.surplus; Surplus = pack.surplus;
Array.Copy(pack.access, Access, pack.access.Length); Array.Copy(pack.access, Access, pack.access.Length);
NotifyPropertyChanged("Access"); NotifyPropertyChanged(nameof(Access));
} break; } break;
case FLYAD7_OBJ_INTERFACE.SYS_DATA_INTERFACE.GET_ZERO_POS: case FLYAD7_OBJ_INTERFACE.SYS_DATA_INTERFACE.GET_ZERO_POS:
...@@ -976,12 +976,12 @@ namespace FlyADBase ...@@ -976,12 +976,12 @@ namespace FlyADBase
public int ADMax { get; } = 65535; public int ADMax { get; } = 65535;
/// <summary> /// <summary>
/// 输入口状态,只有12位有效 /// 输入口状态,只有12位有效, 大AD盒 16位
/// </summary> /// </summary>
public UInt16 IStatus { get; private set; } = 0xffff; public UInt16 IStatus { get; private set; } = 0xffff;
/// <summary> /// <summary>
/// 输出口状态,只有4位有效 /// 输出口状态,只有4位有效, 大AD盒 8位
/// </summary> /// </summary>
public UInt16 OStatus { get; private set; } = 0xffff; public UInt16 OStatus { get; private set; } = 0xffff;
......
using FLY.OBJComponents.Common; using FLY.OBJComponents.Common;
using FLY.OBJComponents.IService;
using FLY.OBJComponents.OBJ_INTERFACE; using FLY.OBJComponents.OBJ_INTERFACE;
using FObjBase; using FObjBase;
using Newtonsoft.Json; using Newtonsoft.Json;
...@@ -6,6 +7,7 @@ using System; ...@@ -6,6 +7,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text; using System.Text;
namespace FLY.OBJComponents.Client namespace FLY.OBJComponents.Client
...@@ -71,6 +73,23 @@ namespace FLY.OBJComponents.Client ...@@ -71,6 +73,23 @@ namespace FLY.OBJComponents.Client
/// <param name="e"></param> /// <param name="e"></param>
void Data_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) void Data_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
PropertyInfo property = sender.GetType().GetProperty(e.PropertyName);
if (!property.CanWrite) {
return;
}
if (sender is IPropertyOpt)
{
var opt = (IPropertyOpt)sender;
string[] nosync = opt.GetNoSyncPropNames();
if (nosync != null && nosync.Count()!=0) {
if (nosync.Contains(e.PropertyName)) {
//这个不需要同步
return;
}
}
}
string objname = (from kv in ObjNames where kv.Value == sender select kv.Key).First(); string objname = (from kv in ObjNames where kv.Value == sender select kv.Key).First();
Dictionary<string, Dictionary<string, object>> DsDso = new Dictionary<string, Dictionary<string, object>> Dictionary<string, Dictionary<string, object>> DsDso = new Dictionary<string, Dictionary<string, object>>
......
...@@ -25,10 +25,16 @@ namespace FLY.OBJComponents.Common ...@@ -25,10 +25,16 @@ namespace FLY.OBJComponents.Common
{ {
throw new Exception("PropertiesManager_JSON 类型="+obj.GetType().ToString()+" 不能找到 属性名=" + propertyName, e); throw new Exception("PropertiesManager_JSON 类型="+obj.GetType().ToString()+" 不能找到 属性名=" + propertyName, e);
} }
if (!property.CanWrite) {
throw new Exception("PropertiesManager_JSON 类型=" + obj.GetType().ToString() + " 属性名=" + propertyName +" 不能set");
}
if (property != null) if (property != null)
{ {
if (v.GetType() == property.PropertyType) if (v.GetType() == property.PropertyType)
{ {
property.SetValue(obj, v, null); property.SetValue(obj, v, null);
} }
else else
......
...@@ -46,7 +46,6 @@ namespace FLY.OBJComponents.Server ...@@ -46,7 +46,6 @@ namespace FLY.OBJComponents.Server
public string property; public string property;
public byte code; public byte code;
public string msg; public string msg;
public bool offIsError;
} }
Dictionary<INotifyPropertyChanged, ErrorAction> obj_error = new Dictionary<INotifyPropertyChanged, ErrorAction>(); Dictionary<INotifyPropertyChanged, ErrorAction> obj_error = new Dictionary<INotifyPropertyChanged, ErrorAction>();
...@@ -60,14 +59,12 @@ namespace FLY.OBJComponents.Server ...@@ -60,14 +59,12 @@ namespace FLY.OBJComponents.Server
{ {
//肯定有,没有就让它出错!!! //肯定有,没有就让它出错!!!
string desp = (propertyInfo.GetCustomAttributes(typeof(DescriptionAttribute), false).First() as DescriptionAttribute).Description; string desp = (propertyInfo.GetCustomAttributes(typeof(DescriptionAttribute), false).First() as DescriptionAttribute).Description;
//bool offIsError = (propertyInfo.GetCustomAttributes(typeof(IsErrorAttribute), false).First() as IsErrorAttribute).OffIsError; //报警如果是反向, 会被设置为放大=-1, 所以 最后属性 肯定是 true 时报警, offIsError没有用
ErrorInfo errorInfo = new ErrorInfo() ErrorInfo errorInfo = new ErrorInfo()
{ {
property = propertyInfo.Name, property = propertyInfo.Name,
msg = desp, msg = desp,
//offIsError = offIsError,
code = ErrCode code = ErrCode
}; };
error_property.Add(errorInfo); error_property.Add(errorInfo);
...@@ -105,7 +102,7 @@ namespace FLY.OBJComponents.Server ...@@ -105,7 +102,7 @@ namespace FLY.OBJComponents.Server
FObjBase.PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD, FObjBase.PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD,
() => () =>
{ {
Misc.BindingOperations.SetBinding(PLCos, "IsConnectedWithPLC", () => Misc.BindingOperations.SetBinding(PLCos, nameof(PLCos.IsConnectedWithPLC), () =>
{ {
bool b = !PLCos.IsConnectedWithPLC; bool b = !PLCos.IsConnectedWithPLC;
...@@ -119,23 +116,51 @@ namespace FLY.OBJComponents.Server ...@@ -119,23 +116,51 @@ namespace FLY.OBJComponents.Server
}, TimeSpan.FromSeconds(3), true, false, this, MARKNO_DELAY_ISCONNECTED, true); }, TimeSpan.FromSeconds(3), true, false, this, MARKNO_DELAY_ISCONNECTED, true);
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
//把全部报警状态取反,也就是不报警!!! //启动定时器,每1秒查报警,防止 以为报警复位了,但其实还在报警
foreach (var kv in obj_error)
{ //FObjBase.PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD,
object sender = kv.Key; // () =>
foreach (var ei in kv.Value.error_property) // {
// foreach(var objError in obj_error)
// {
// object sender = objError.Key;
// ErrorAction errorAction = objError.Value;
// foreach (var ei in errorAction.error_property)
// {
// //获取描述
// var type = sender.GetType();
// var property = type.GetProperty(ei.property);
// bool b = (bool)property.GetValue(sender, null);
// string desp = ei.msg;
// ERR_STATE state = b ? ERR_STATE.ON : ERR_STATE.OFF;
// byte errcode = ei.code;//每个报警必须不一样!!
// string description = desp;
// errorAction.action?.Invoke(ref description, errorAction.state);
// mWarning.Add(errcode, description, state);
// }
// }
// }, TimeSpan.FromSeconds(1));
}
public void ResetError(INotifyPropertyChanged sender)
{ {
if (ei.offIsError) var type = sender.GetType();
foreach (var ei in obj_error[sender as INotifyPropertyChanged].error_property)
{ {
Misc.PropertiesManager.SetValue(sender, ei.property, true); var property = type.GetProperty(ei.property);
property.SetValue(sender, false);
} }
//false 不用写,默认值就是
} }
public void ResetError()
{
foreach (var sender in obj_error.Keys) {
ResetError(sender);
} }
} }
void Obj_PropertyChanged_ForError(object sender, PropertyChangedEventArgs e) void Obj_PropertyChanged_ForError(object sender, PropertyChangedEventArgs e)
{ {
ErrorAction errorAction = obj_error[sender as INotifyPropertyChanged]; ErrorAction errorAction = obj_error[sender as INotifyPropertyChanged];
...@@ -150,13 +175,8 @@ namespace FLY.OBJComponents.Server ...@@ -150,13 +175,8 @@ namespace FLY.OBJComponents.Server
var property = type.GetProperty(ei.property); var property = type.GetProperty(ei.property);
bool b = (bool)property.GetValue(sender, null); bool b = (bool)property.GetValue(sender, null);
string desp = ei.msg; string desp = ei.msg;
bool offIsError = ei.offIsError;
ERR_STATE state; ERR_STATE state = b ? ERR_STATE.ON : ERR_STATE.OFF;
if (offIsError)
state = !b ? ERR_STATE.ON : ERR_STATE.OFF;
else
state = b ? ERR_STATE.ON : ERR_STATE.OFF;
byte errcode = ei.code;//每个报警必须不一样!! byte errcode = ei.code;//每个报警必须不一样!!
string description = desp; string description = desp;
......
...@@ -103,23 +103,43 @@ ...@@ -103,23 +103,43 @@
<StackPanel > <StackPanel >
<StackPanel Orientation="Horizontal" Margin="2"> <StackPanel Orientation="Horizontal" Margin="2">
<TextBlock Text="入" Style="{StaticResource ItemHeaderStyle}" /> <TextBlock Text="入" Style="{StaticResource ItemHeaderStyle}" />
<StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=15}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=14}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=13}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=12}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="13" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=11}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=11}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=10}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=10}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=9}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=9}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=8}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=8}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="9" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="5" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="1" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Grid Margin="2"> <Grid Margin="2">
...@@ -129,11 +149,23 @@ ...@@ -129,11 +149,23 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<TextBlock Text="出" Style="{StaticResource ItemHeaderStyle}" /> <TextBlock Text="出" Style="{StaticResource ItemHeaderStyle}" />
<StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="5" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="1" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Grid Margin="1" > <Grid Margin="1" >
......
...@@ -16,10 +16,16 @@ ...@@ -16,10 +16,16 @@
<Setter Property="Margin" Value="5,0"/> <Setter Property="Margin" Value="5,0"/>
</Style> </Style>
<Style x:Key="IOStyle" TargetType="Rectangle" > <Style x:Key="IOStyle" TargetType="Rectangle" >
<Setter Property="Width" Value="11" /> <Setter Property="Width" Value="10" />
<Setter Property="Height" Value="12" /> <Setter Property="Height" Value="12" />
<Setter Property="Margin" Value="1" /> <Setter Property="Margin" Value="1" />
</Style> </Style>
<Style x:Key="IOTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#FF119EDA" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="10"/>
</Style>
<Style x:Key="BtnStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle_empty}"> <Style x:Key="BtnStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle_empty}">
<Setter Property="Margin" Value="2"/> <Setter Property="Margin" Value="2"/>
<Setter Property="Foreground" Value="{StaticResource AccentBaseColorBrush}"/> <Setter Property="Foreground" Value="{StaticResource AccentBaseColorBrush}"/>
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FLY.Thick.Base.UI.UiModule" xmlns:local="clr-namespace:FLY.Thick.Base.UI.UiModule"
d:DesignWidth="250"
mc:Ignorable="d" > mc:Ignorable="d" >
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
...@@ -12,10 +13,16 @@ ...@@ -12,10 +13,16 @@
<ResourceDictionary Source="pack://application:,,,/FLY.Thick.Base.UI;component/Converter/Dictionary_MyConv.xaml"/> <ResourceDictionary Source="pack://application:,,,/FLY.Thick.Base.UI;component/Converter/Dictionary_MyConv.xaml"/>
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<Style TargetType="Rectangle" x:Key="RectangleStyle_IO"> <Style TargetType="Rectangle" x:Key="IOStyle">
<Setter Property="Width" Value="11" /> <Setter Property="Width" Value="9" />
<Setter Property="Height" Value="24" /> <Setter Property="Height" Value="20" />
<Setter Property="Margin" Value="2" /> <Setter Property="Margin" Value="1" />
</Style>
<Style x:Key="IOTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource Color_theme_background}" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="9"/>
</Style> </Style>
<Style TargetType="TextBlock" x:Key="TextBlockStyle_ItemHeader"> <Style TargetType="TextBlock" x:Key="TextBlockStyle_ItemHeader">
<Setter Property="FontWeight" Value="Bold"/> <Setter Property="FontWeight" Value="Bold"/>
...@@ -25,7 +32,7 @@ ...@@ -25,7 +32,7 @@
<Setter Property="Foreground" Value="#FF3B3B3B"/> <Setter Property="Foreground" Value="#FF3B3B3B"/>
<Setter Property="Margin" Value="5,0"/> <Setter Property="Margin" Value="5,0"/>
</Style> </Style>
<local:DynAreaIOViewModel_UnitTest x:Key="viewModel" IsError="True" ErrMsg="枫莱尔控制器连接断开" /> <local:DynAreaIOViewModel_UnitTest x:Key="viewModel" IsError="False" ErrMsg="枫莱尔控制器连接断开" />
</ResourceDictionary> </ResourceDictionary>
</UserControl.Resources> </UserControl.Resources>
<Button Click="Border_IO_Click" Style="{StaticResource ButtonStyle_empty}" d:DataContext="{StaticResource viewModel}"> <Button Click="Border_IO_Click" Style="{StaticResource ButtonStyle_empty}" d:DataContext="{StaticResource viewModel}">
...@@ -35,22 +42,32 @@ ...@@ -35,22 +42,32 @@
<StackPanel Orientation="Horizontal" Margin="2"> <StackPanel Orientation="Horizontal" Margin="2">
<TextBlock Text="入" Style="{StaticResource TextBlockStyle_ItemHeader}" /> <TextBlock Text="入" Style="{StaticResource TextBlockStyle_ItemHeader}" />
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=11}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=15}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=10}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=14}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=9}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=13}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=8}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=12}" Style="{StaticResource IOStyle}"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=11}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=10}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=9}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=8}" Style="{StaticResource IOStyle}"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource IOStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding IStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="1" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Grid Margin="2"> <Grid Margin="2">
...@@ -61,10 +78,19 @@ ...@@ -61,10 +78,19 @@
<StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<TextBlock Text="出" Style="{StaticResource TextBlockStyle_ItemHeader}" /> <TextBlock Text="出" Style="{StaticResource TextBlockStyle_ItemHeader}" />
<StackPanel Orientation="Horizontal" Margin="4,0"> <StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=7}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=6}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=5}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource RectangleStyle_IO}"/> <Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=4}" Style="{StaticResource IOStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="4,0">
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=3}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=2}" Style="{StaticResource IOStyle}"/>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=1}" Style="{StaticResource IOStyle}"/>
<Grid>
<Rectangle Fill="{Binding OStatus,Converter={StaticResource io2bitcolorconv},ConverterParameter=0}" Style="{StaticResource IOStyle}"/>
<TextBlock Text="1" Style="{StaticResource IOTextStyle}"/>
</Grid>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<StackPanel Orientation="Vertical" Grid.Column="1" Visibility="{Binding IsForever,Converter={StaticResource visbilityconv},ConverterParameter=HiddenWhenTrue}"> <StackPanel Orientation="Vertical" Grid.Column="1" Visibility="{Binding IsForever,Converter={StaticResource visbilityconv},ConverterParameter=HiddenWhenTrue}">
......
...@@ -9,8 +9,6 @@ namespace SQLite ...@@ -9,8 +9,6 @@ namespace SQLite
public class DBTable<T> : IDBTable public class DBTable<T> : IDBTable
where T : new() where T : new()
{ {
public List<SQLiteHelper.ArrayFieldTypeInfo> ArrayFieldTypeInfos = new List<SQLiteHelper.ArrayFieldTypeInfo>();
public string TableName { get; private set; } public string TableName { get; private set; }
private long freeID = 0; private long freeID = 0;
...@@ -32,10 +30,7 @@ namespace SQLite ...@@ -32,10 +30,7 @@ namespace SQLite
{ {
get get
{ {
if (ArrayFieldTypeInfos.Count() == 0)
return ddl; return ddl;
else
return SQLiteHelper.GetCreateTableCommandText(typeof(T), ArrayFieldTypeInfos.ToArray());
} }
} }
...@@ -81,7 +76,7 @@ namespace SQLite ...@@ -81,7 +76,7 @@ namespace SQLite
sql += " " + condition; sql += " " + condition;
DataTable dataTable = sqliteHelper.ExecuteReader(sql); DataTable dataTable = sqliteHelper.ExecuteReader(sql);
return SQLiteHelper.ToObjs<T>(dataTable, ArrayFieldTypeInfos.ToArray()); return SQLiteHelper.ToObjs<T>(dataTable);
} }
/// <summary> /// <summary>
......
...@@ -11,15 +11,6 @@ namespace SQLite ...@@ -11,15 +11,6 @@ namespace SQLite
} }
} }
public class BortherAttribute : Attribute
{
}
public class ChildAttribute : Attribute
{
}
public class PropertyIndexAttribute : Attribute public class PropertyIndexAttribute : Attribute
{ {
......
...@@ -109,24 +109,6 @@ namespace SQLite ...@@ -109,24 +109,6 @@ namespace SQLite
return null; return null;
} }
} }
public class ArrayFieldTypeInfo
{
/// <summary>
/// 属性名
/// </summary>
public string PropertyName { get; set; }
/// <summary>
/// 数组大小
/// </summary>
public int Length { get; set; }
public ArrayFieldTypeInfo(string propertyname, int length)
{
PropertyName = propertyname;
Length = length;
}
}
public static string GetTableName(Type type) public static string GetTableName(Type type)
...@@ -142,7 +124,7 @@ namespace SQLite ...@@ -142,7 +124,7 @@ namespace SQLite
} }
} }
static string GetCreateTableCommandText_fieldText(Type type, IEnumerable<ArrayFieldTypeInfo> arrayFieldTypeInfos) static string GetCreateTableCommandText_fieldText(Type type)
{ {
string total_fieldtext = ""; string total_fieldtext = "";
...@@ -161,42 +143,6 @@ namespace SQLite ...@@ -161,42 +143,6 @@ namespace SQLite
if (propertyIndex != null) if (propertyIndex != null)
fieldText.index = propertyIndex.Index;//默认index=0 fieldText.index = propertyIndex.Index;//默认index=0
//这个属性 下面的全部属性,是同一个表
if (propertyInfo.GetCustomAttributes(typeof(BortherAttribute), false).Count() > 0)
{
//从arrayFieldTypeInfos 提取
string startswith = propertyInfo.Name + ".";
var aftis = from afti in arrayFieldTypeInfos
where afti.PropertyName.StartsWith(startswith)
select new ArrayFieldTypeInfo(afti.PropertyName.Substring(startswith.Length), afti.PropertyName.Length);
fieldText.fieldtext = GetCreateTableCommandText_fieldText(propertyInfo.PropertyType, aftis);
continue;
}
if (propertyInfo.PropertyType.IsArray)//是数组,需要明确大小
{
int length = arrayFieldTypeInfos.First((a) => a.PropertyName == propertyInfo.Name).Length;
Type elementType = propertyInfo.PropertyType.GetElementType();
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == elementType);
string text = "";
for (int i = 0; i < length; i++)
{
if (i != 0)
text += ",";
text += string.Format("{0}{1} {2}",
propertyInfo.Name,
i,
fieldTypeInfo.FieldType);
}
fieldText.fieldtext = text;
}
else
{
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType); SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType);
string text = ""; string text = "";
text += string.Format("{0} {1}", propertyInfo.Name, fieldTypeInfo.FieldType); text += string.Format("{0} {1}", propertyInfo.Name, fieldTypeInfo.FieldType);
...@@ -205,7 +151,7 @@ namespace SQLite ...@@ -205,7 +151,7 @@ namespace SQLite
if (propertyInfo.GetCustomAttributes(typeof(KeyAttribute), false).Count() > 0) if (propertyInfo.GetCustomAttributes(typeof(KeyAttribute), false).Count() > 0)
text += " PRIMARY KEY"; text += " PRIMARY KEY";
fieldText.fieldtext = text; fieldText.fieldtext = text;
}
} }
//从小到大排序 //从小到大排序
fieldTexts.Sort((fieldTextIndex0, fieldTextIndex1) => fieldTexts.Sort((fieldTextIndex0, fieldTextIndex1) =>
...@@ -227,11 +173,8 @@ namespace SQLite ...@@ -227,11 +173,8 @@ namespace SQLite
} }
return total_fieldtext; return total_fieldtext;
} }
public static string GetCreateTableCommandText(Type type, params ArrayFieldTypeInfo[] arrayFieldTypeInfos) public static string GetCreateTableCommandText(Type type)
{ {
if (arrayFieldTypeInfos == null)
arrayFieldTypeInfos = new ArrayFieldTypeInfo[0];
//CREATE TABLE table_name( //CREATE TABLE table_name(
//column1 datatype PRIMARY KEY, //column1 datatype PRIMARY KEY,
//column2 datatype, //column2 datatype,
...@@ -240,7 +183,7 @@ namespace SQLite ...@@ -240,7 +183,7 @@ namespace SQLite
// columnN datatype, // columnN datatype,
//) //)
string tablename = GetTableName(type); string tablename = GetTableName(type);
string fieldtext = GetCreateTableCommandText_fieldText(type, arrayFieldTypeInfos); string fieldtext = GetCreateTableCommandText_fieldText(type);
string commandText = string.Format("CREATE TABLE {0} ({1})", tablename, fieldtext); string commandText = string.Format("CREATE TABLE {0} ({1})", tablename, fieldtext);
return commandText; return commandText;
} }
...@@ -270,37 +213,10 @@ namespace SQLite ...@@ -270,37 +213,10 @@ namespace SQLite
object o = propertyInfo.GetValue(cell, null); object o = propertyInfo.GetValue(cell, null);
//这个属性 下面的全部属性,是同一个表
if (propertyInfo.GetCustomAttributes(typeof(BortherAttribute), false).Count() > 0)
{
fieldText.fieldtext = GetInsertCommandText_fieldText(o);
continue;
}
if (propertyInfo.PropertyType.IsArray)//是数组,需要明确大小
{
Type elementType = propertyInfo.PropertyType.GetElementType();
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == elementType);
Array a = o as Array;
string text = "";
for (int i = 0; i < a.Length; i++)
{
if (i != 0)
text += ",";
text += fieldTypeInfo.PtoS(a.GetValue(i));
}
fieldText.fieldtext = text;
}
else
{
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType); SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType);
fieldText.fieldtext = fieldTypeInfo.PtoS(o); fieldText.fieldtext = fieldTypeInfo.PtoS(o);
}
} }
//从小到大排序 //从小到大排序
...@@ -364,36 +280,12 @@ namespace SQLite ...@@ -364,36 +280,12 @@ namespace SQLite
object o = propertyInfo.GetValue(cell, null); object o = propertyInfo.GetValue(cell, null);
//这个属性 下面的全部属性,是同一个表
if (propertyInfo.GetCustomAttributes(typeof(BortherAttribute), false).Count() > 0)
{
fieldtext += GetUpdateCommandText_fieldText(o);
continue;
}
if (propertyInfo.PropertyType.IsArray)//是数组,需要明确大小
{
Type elementType = propertyInfo.PropertyType.GetElementType();
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == elementType);
Array a = o as Array;
for (int i = 0; i < a.Length; i++)
{
if (i != 0)
fieldtext += ",";
fieldtext += string.Format("{0}{1} = {2}", propertyInfo.Name, i, fieldTypeInfo.PtoS(a.GetValue(i)));
}
}
else
{
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType); SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == propertyInfo.PropertyType);
fieldtext += string.Format("{0} = {1}", propertyInfo.Name, fieldTypeInfo.PtoS(o)); fieldtext += string.Format("{0} = {1}", propertyInfo.Name, fieldTypeInfo.PtoS(o));
}
} }
return fieldtext; return fieldtext;
...@@ -421,19 +313,18 @@ namespace SQLite ...@@ -421,19 +313,18 @@ namespace SQLite
return commandText; return commandText;
} }
public static List<T> ToObjs<T>(DataTable dataTable, params ArrayFieldTypeInfo[] arrayFieldTypeInfos) public static List<T> ToObjs<T>(DataTable dataTable)
where T : new() where T : new()
{ {
Type type = typeof(T);
List<T> list = new List<T>(); List<T> list = new List<T>();
foreach (DataRow dataRow in dataTable.Rows) foreach (DataRow dataRow in dataTable.Rows)
{ {
list.Add(ToObj<T>(dataRow, arrayFieldTypeInfos)); list.Add(ToObj<T>(dataRow));
} }
return list; return list;
} }
static void SetObj(object t, DataRow dataRow, IEnumerable<ArrayFieldTypeInfo> arrayFieldTypeInfos) static void SetObj(object t, DataRow dataRow)
{ {
Type type = t.GetType(); Type type = t.GetType();
...@@ -447,49 +338,17 @@ namespace SQLite ...@@ -447,49 +338,17 @@ namespace SQLite
Type ptype = propertyInfo.PropertyType; Type ptype = propertyInfo.PropertyType;
//这个属性 下面的全部属性,是同一个表
if (propertyInfo.GetCustomAttributes(typeof(BortherAttribute), false).Count() > 0)
{
//从arrayFieldTypeInfos 提取
string startswith = propertyInfo.Name + ".";
var aftis = from afti in arrayFieldTypeInfos
where afti.PropertyName.StartsWith(startswith)
select new ArrayFieldTypeInfo(afti.PropertyName.Substring(startswith.Length), afti.PropertyName.Length);
object obj = propertyInfo.GetValue(t, null);
SetObj(obj, dataRow, aftis);
continue;
}
if (ptype.IsArray)//是数组,需要明确大小
{
Type elementType = propertyInfo.PropertyType.GetElementType();
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == elementType);
int length = arrayFieldTypeInfos.First((a) => a.PropertyName == propertyInfo.Name).Length;
Array array = (Array)ptype.Assembly.CreateInstance(ptype.FullName, false, BindingFlags.CreateInstance, null, new object[] { length }, null, null);
for (int i = 0; i < length; i++)
{
object o = fieldTypeInfo.StoP(dataRow[propertyInfo.Name + i]);
array.SetValue(o, i);
}
propertyInfo.SetValue(t, array, null);
}
else
{
SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == ptype); SQLiteFieldTypeInfo fieldTypeInfo = FieldTypeInfo.Find((fti) => fti.PropertyType == ptype);
object o = fieldTypeInfo.StoP(dataRow[propertyInfo.Name]); object o = fieldTypeInfo.StoP(dataRow[propertyInfo.Name]);
propertyInfo.SetValue(t, o, null); propertyInfo.SetValue(t, o, null);
} }
} }
} public static T ToObj<T>(DataRow dataRow)
public static T ToObj<T>(DataRow dataRow, params ArrayFieldTypeInfo[] arrayFieldTypeInfos)
where T : new() where T : new()
{ {
Type type = typeof(T);
T t = new T(); T t = new T();
SetObj(t, dataRow, arrayFieldTypeInfos); SetObj(t, dataRow);
return t; return t;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment