我是学生,我是C#的新手。我正在尝试为农村医院创建一个程序,该程序将查询放射学PACS系统并在新扫描到达时显示消息。
这是如何工作的:
1)用户通过单击
形式的查询按钮来运行查询2)它查询PACS服务器并将所有待处理的扫描显示为表中的数据。 (见下面的代码)
3)每次扫描都有自己的“入藏号”
这就是我失去的地方:
我想修改表单,以便当用户单击名为“QueryBtn”的按钮时,它会检查是否有任何新的入藏号不在上一个查询中。如果有新的入藏号码,我想显示一个消息框,显示“找到新的扫描”
我已经被困在这一段很长一段时间了,愿意为任何可以帮我解决问题的人买午餐。 :)
谢谢,
杰登
(如果此表中有一个新的“入藏号”未在上一个查询中列出,我希望它显示一个消息框)
//这是向表中添加数据的地方:
private void LoadResultsToGrid(DCXOBJIterator it)
{
DCXOBJ currObj = null;
try
{
DataTable rq = new DataTable("RQ");
DataRow rqRow;
rq.Columns.Add(new DataColumn("Patient Name", typeof(string)));
rq.Columns.Add(new DataColumn("Accession Number", typeof(string)));
rq.Columns.Add(new DataColumn("Requested Procedure ID", typeof(string)));
rq.Columns.Add(new DataColumn("Requested Procedure Description", typeof(string)));
DataTable sps = new DataTable("SPS");
DataRow spsRow;
sps.Columns.Add(new DataColumn("Requested Procedure ID", typeof(string)));
sps.Columns.Add(new DataColumn("Modality", typeof(string)));
sps.Columns.Add(new DataColumn("Scheduled Station AE Title", typeof(string)));
sps.Columns.Add(new DataColumn("Scheduled Procedure Step Description", typeof(string)));
// Iterate over the query results
for (; !it.AtEnd(); it.Next())
{
currObj = it.Get();
rqRow = rq.NewRow();
rqRow["Patient Name"] =
TryGetString(currObj, DICOM_TAGS_ENUM.patientName);
rqRow["Accession Number"] =
TryGetString(currObj,DICOM_TAGS_ENUM.AccessionNumber);
rqRow["Requested Procedure ID"] =
TryGetString(currObj,DICOM_TAGS_ENUM.RequestedProcedureID);
rqRow["Requested Procedure Description"] =
TryGetString(currObj,DICOM_TAGS_ENUM.RequestedProcedureDescription);
rq.Rows.Add(rqRow);
这是查询按钮:
private void QueryBtn_Click(object sender, EventArgs e)
{
DCXOBJIterator it = null;
DCXREQ req = null;
DCXOBJ rp = null;
DCXOBJ sps = null;
DCXELM el = null;
DCXOBJIterator spsIt = null;
try
{
// Fill the query object
rp = new DCXOBJ();
sps = new DCXOBJ();
el = new DCXELM();
// Build the Scheduled procedure Step (SPS) item
el.Init((int)DICOM_TAGS_ENUM.ScheduledStationAETitle);
el.Value = StationNameEdit.Text;
sps.insertElement(el);
答案 0 :(得分:1)
所以我的理解是,每次你使用LoadResultsToGrid时,你都会得到所有待处理的扫描(那些你可能已经显示的扫描以及新的结果,对吗?)。
您可以创建静态列表并保留已显示的AcessionNumbers的记录。
private static List<String> AlreadyDisplayedAccessionNumber = new List<String>();
private static bool IsFirstLoad =true;
所以在你的for循环中,紧接着:
rqRow["Accession Number"] = TryGetString(currObj,DICOM_TAGS_ENUM.AccessionNumber);
您将检查此登录号是否已显示
if(!AlreadyDisplayedAccessionNumber.Contains(TryGetString(currObj,DICOM_TAGS_ENUM.AccessionNumber)))
{
//do not display this message if we are loading the details first time round
if(!IsFirstLoad)
{
MessageBox.Show("New scan found");
}
AlreadyDisplayedAccessionNumber.Add(TryGetString(currObj,DICOM_TAGS_ENUM.AccessionNumber);//add to our list this new accession number which we have just reported it as new, in order not to report it again as new
}
在你的方法LoadResultsToGrid
的最后private void LoadResultsToGrid(DCXOBJIterator it)
{
//all your code for loading here
IsFirstLoad=false; //set this to false, we have just load the results for the first time
}
希望有所帮助