获取 table 数据并在多个地方使用它
Get table data and use it in several places
我必须在 table 中加载组织数据,然后将它的数据替换为包含如下标签的一百个字符串文本中的数据:
<#PI_Name#>
从 table 中获取一次数据然后将相关数据替换为字符串标记的最佳方法是什么?
谢谢
编辑:
在重读了几次你的问题之后我想我可能误解了你的问题,你不是在问如何存储数据以便可以在多个地方访问它你在问如何用数据替换字符串中的标签
在这种情况下我会建议建立一个标签字典
Dictionary<string,string> Tags;
string mask;
string output = mask;
foreach(var tag in tags)
{
output = output.Replace(tag.Key,tag.Value)
}
如果您不想预先构建您的标签字典,您可以使用 RegEx 和反射以困难的方式使用正则表达式来识别字符串中的标签,然后使用反射来查找与标签相同的属性
见RegEx
和 Get property value from string using reflection in C#
请注意,您也可以使用 MS 的 string.Format 函数,但是您必须遵循 MS 标记规则,这些规则是位置未命名和用户花括号,即 string.Format("({0}, {1})", 50, 20) 会 return "(50,20)"
最好的方法是创建一个支持您的数据需求的对象模型,一旦有了,您就可以正确地调整对它的访问
MS's MVVM pattern give a good overview on the concept
但总的来说,它的工作方式应该与此类似,创建一个数据模型,将数据存储在一个合理的庄园中,以便相关项目位于同一位置,然后让这些 类 管理数据,即将它们与数据库进行相互转换,并解析任何复杂的数据,例如您提到的字符串(您可能会为此层使用 EntityFamework 或其他代码生成器)
然后让您的业务层管理数据,这些层处理飞蛾、验证、撤消和更改数据,业务层不需要 1:1 与您拥有的数据层拥有管理多个对象或仅管理一部分的业务模型
最后,在此之上,您拥有管理用户看到的内容以及用户如何与业务层交互的表示层
示例 SUDO
Database Table {FirstName, Surname, DOB}
DataModel
{
String firstname;
String Surname;
dateTime DOB;
static DataModel Load(string name){}//read from DB
static DataModel Load(dateTime dob){}//read from DB
void Save(){}//write to DB
}
BusinessModel
{
DataModel orginalData
String FullName;
int Age;
bool IsValid;//validate changes ie that age as less than 100
void Reset(){}//undo changes and reset data to orginalData
string ValidateText(){}//Text explaining why is valid is false
void Save(){}//copy changes to DataModel and ask it to save to DB
//Events to inform GUI of data changes that need refreshing
}
为您的组织table写入数据table属性。在那里,您可以设置 table 的值,并让这些值也改变列。
我必须在 table 中加载组织数据,然后将它的数据替换为包含如下标签的一百个字符串文本中的数据:
<#PI_Name#>
从 table 中获取一次数据然后将相关数据替换为字符串标记的最佳方法是什么?
谢谢
编辑:
在重读了几次你的问题之后我想我可能误解了你的问题,你不是在问如何存储数据以便可以在多个地方访问它你在问如何用数据替换字符串中的标签
在这种情况下我会建议建立一个标签字典
Dictionary<string,string> Tags;
string mask;
string output = mask;
foreach(var tag in tags)
{
output = output.Replace(tag.Key,tag.Value)
}
如果您不想预先构建您的标签字典,您可以使用 RegEx 和反射以困难的方式使用正则表达式来识别字符串中的标签,然后使用反射来查找与标签相同的属性
见RegEx 和 Get property value from string using reflection in C#
请注意,您也可以使用 MS 的 string.Format 函数,但是您必须遵循 MS 标记规则,这些规则是位置未命名和用户花括号,即 string.Format("({0}, {1})", 50, 20) 会 return "(50,20)"
最好的方法是创建一个支持您的数据需求的对象模型,一旦有了,您就可以正确地调整对它的访问
MS's MVVM pattern give a good overview on the concept
但总的来说,它的工作方式应该与此类似,创建一个数据模型,将数据存储在一个合理的庄园中,以便相关项目位于同一位置,然后让这些 类 管理数据,即将它们与数据库进行相互转换,并解析任何复杂的数据,例如您提到的字符串(您可能会为此层使用 EntityFamework 或其他代码生成器)
然后让您的业务层管理数据,这些层处理飞蛾、验证、撤消和更改数据,业务层不需要 1:1 与您拥有的数据层拥有管理多个对象或仅管理一部分的业务模型
最后,在此之上,您拥有管理用户看到的内容以及用户如何与业务层交互的表示层
示例 SUDO
Database Table {FirstName, Surname, DOB}
DataModel
{
String firstname;
String Surname;
dateTime DOB;
static DataModel Load(string name){}//read from DB
static DataModel Load(dateTime dob){}//read from DB
void Save(){}//write to DB
}
BusinessModel
{
DataModel orginalData
String FullName;
int Age;
bool IsValid;//validate changes ie that age as less than 100
void Reset(){}//undo changes and reset data to orginalData
string ValidateText(){}//Text explaining why is valid is false
void Save(){}//copy changes to DataModel and ask it to save to DB
//Events to inform GUI of data changes that need refreshing
}
为您的组织table写入数据table属性。在那里,您可以设置 table 的值,并让这些值也改变列。