添加新数据行时显示消息

时间:2013-12-04 19:02:58

标签: c#

我是学生,我是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);

1 个答案:

答案 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
}

希望有所帮助