我想將一個列表的電報排序到一個從站列表。列表排序和模式匹配
如果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