我想将一个列表的电报排序到一个从站列表。列表排序和模式匹配
如果PrimeAddress和SecondaryAddress匹配,则报文属于从站。
设备存储在Datatable中。
我想检查设备是否已经包含telegramm。
我第一次尝试看起来是这样的:
public static DataTable mdlform_NewMBUStele(int LoggerID, List<MbusTelegram> mList, DataTable _deviceDataTable)
{
//TODO Das ist total dirty und gar nicht clean hier...
foreach (DataRow dRow in _deviceDataTable.Rows)
{
if (dRow.ItemArray[3] is Slave)
{
foreach (MbusTelegram mb in mList)
{
int primeID = (int)dRow.ItemArray[1];
if (primeID == LoggerID)
{
Slave slv = (Slave)dRow.ItemArray[3];
foreach (MbusTelegram mbus in mList)
{
if (slv.PrimeAddress == mbus.Header.PrimeAddress && slv.SecondaryAdd == mbus.FixedDataHeader.SecondaryAddress)
{
if (slv.ListOfTelegramms == null)
{
slv.ListOfTelegramms = new List<MbusTelegram>();
}
if (!slv.ListOfTelegramms.Contains(mbus))
{
slv.ListOfTelegramms.Add(mbus);
//TODO Check if the slave already contains the telegramm, if so don't add it..
}
}
}
}
}
}
}
return _deviceDataTable;
}
DataTable的结构:
private void IniDataTable()
{
_deviceDataTable = new DataTable("Table");
_deviceDataTable.Columns.Add("ID", typeof(int));
_deviceDataTable.Columns.Add("IDParent", typeof(int));
_deviceDataTable.Columns.Add("Name", typeof(string));
_deviceDataTable.Columns.Add("Object", typeof(object));
_deviceDataTable.Rows.Add(new object[] { 0, DBNull.Value, "Addressen", null });
//GenerateDummyDataTable();
IniDeviceTreeView();
}
此代码不能很好地工作,并没有检查设备已经包含telegramm。任何更好的想法?
你应该提供的表结构中的问题 – Magnus
好的,请稍等...... – Kingpin
几点意见只是阅读:1)不要使用那些讨厌的索引中的列(3 =对象,等等) - 甚至像“对象”这样的魔法字符串都比这更好。 2.)考虑使用键入的表格 - 比你不需要的 - 做你的问题:没有看到这个东西是什么关于我肯定没有更好的主意...... – Carsten