internal override void SetListViewItemText(XmlDocument dom, byte[] baTimestamp, bool bSetBarcodeColumn, string strRecPath, string strBiblioRecPath, string[] summary_col_names, SummaryInfo summary, ListViewItem item) { string strBiblioSummary = ""; string strISBnISSN = ""; string strTargetRecPath = ""; if (summary != null && summary.Values != null) { if (summary.Values.Length > 0) strBiblioSummary = summary.Values[0]; if (summary.Values.Length > 1) strISBnISSN = summary.Values[1]; if (summary.Values.Length > 2) strTargetRecPath = summary.Values[2]; } OriginItemData data = null; data = (OriginItemData)item.Tag; if (data == null) { data = new OriginItemData(); item.Tag = data; } else { data.Changed = false; } data.Xml = dom.OuterXml; // data.Timestamp = baTimestamp; string strState = DomUtil.GetElementText(dom.DocumentElement, "state"); string strLocation = DomUtil.GetElementText(dom.DocumentElement, "location"); string strPrice = DomUtil.GetElementText(dom.DocumentElement, "price"); string strBookType = DomUtil.GetElementText(dom.DocumentElement, "bookType"); string strRegisterNo = DomUtil.GetElementText(dom.DocumentElement, "registerNo"); string strComment = DomUtil.GetElementText(dom.DocumentElement, "comment"); string strMergeComment = DomUtil.GetElementText(dom.DocumentElement, "mergeComment"); string strBatchNo = DomUtil.GetElementText(dom.DocumentElement, "batchNo"); string strBorrower = DomUtil.GetElementText(dom.DocumentElement, "borrower"); string strBorrowDate = DomUtil.GetElementText(dom.DocumentElement, "borrowDate"); string strAccessNo = DomUtil.GetElementText(dom.DocumentElement, "accessNo"); // 2007/6/20 strBorrowDate = DateTimeUtil.LocalTime(strBorrowDate, "u"); string strBorrowPeriod = DomUtil.GetElementText(dom.DocumentElement, "borrowPeriod"); ListViewUtil.ChangeItemText(item, COLUMN_SUMMARY, strBiblioSummary); ListViewUtil.ChangeItemText(item, COLUMN_ACCESSNO, strAccessNo); ListViewUtil.ChangeItemText(item, COLUMN_ISBNISSN, strISBnISSN); ListViewUtil.ChangeItemText(item, COLUMN_STATE, strState); ListViewUtil.ChangeItemText(item, COLUMN_LOCATION, strLocation); ListViewUtil.ChangeItemText(item, COLUMN_PRICE, strPrice); ListViewUtil.ChangeItemText(item, COLUMN_BOOKTYPE, strBookType); ListViewUtil.ChangeItemText(item, COLUMN_REGISTERNO, strRegisterNo); ListViewUtil.ChangeItemText(item, COLUMN_COMMENT, strComment); ListViewUtil.ChangeItemText(item, COLUMN_MERGECOMMENT, strMergeComment); ListViewUtil.ChangeItemText(item, COLUMN_BATCHNO, strBatchNo); ListViewUtil.ChangeItemText(item, COLUMN_BORROWER, strBorrower); ListViewUtil.ChangeItemText(item, COLUMN_BORROWDATE, strBorrowDate); ListViewUtil.ChangeItemText(item, COLUMN_BORROWPERIOD, strBorrowPeriod); ListViewUtil.ChangeItemText(item, COLUMN_RECPATH, strRecPath); ListViewUtil.ChangeItemText(item, COLUMN_BIBLIORECPATH, strBiblioRecPath); ListViewUtil.ChangeItemText(item, COLUMN_TARGETRECPATH, strTargetRecPath); bool bBarcodeChanged = false; if (bSetBarcodeColumn == true) { string strBarcode = DomUtil.GetElementText(dom.DocumentElement, "barcode"); string strOldBarcode = ListViewUtil.GetItemText(item, COLUMN_BARCODE); if (strBarcode != strOldBarcode) { ListViewUtil.ChangeItemText(item, COLUMN_BARCODE, strBarcode); bBarcodeChanged = true; } } if (item.ImageIndex != TYPE_VERIFIED || bBarcodeChanged == true) // 2012/4/8 原来不是验证后状态,或者条码号栏内容修改过,均可以重设置颜色。否则不应港重设颜色 --- 主要目的是保留以前验证后的状态 SetItemColor(item, TYPE_NORMAL); }
// 设置listview item的changed状态 // TODO: 是否需要设置一个指示那些部分被修改的说明性字符串? static void SetItemChanged(ListViewItem item, bool bChanged) { OriginItemData data = (OriginItemData)item.Tag; if (data == null) { data = new OriginItemData(); item.Tag = data; } data.Changed = bChanged; /* if (item.ImageIndex == TYPE_ERROR) { // 如果本来就是TYPE_ERROR,则不修改颜色 } else if (item.ImageIndex == TYPE_NORMAL) { if (bChanged == true) SetItemColor(item, TYPE_CHANGED); // TODO: 这里会修改深浅间隔的颜色。是否需要重刷一遍颜色? } if (item.ImageIndex == TYPE_CHANGED) { if (bChanged == false) SetItemColor(item, TYPE_NORMAL); // TODO: 这里会修改深浅间隔的颜色。是否需要重刷一遍颜色? } * */ }
// 根据册条码号或者记录路径,装入册记录 // parameters: // strBarcodeOrRecPath 册条码号或者记录路径。如果内容前缀为"@path:"则表示为路径 // strMatchLocation 附加的馆藏地点匹配条件。如果==null,表示没有这个附加条件(注意,""和null含义不同,""表示确实要匹配这个值) // return: // -2 册条码号已经在list中存在了(行没有加入listview中) // -1 出错(注意表示出错的行已经加入listview中了) // 0 因为馆藏地点不匹配,没有加入list中 // 1 成功 public int LoadOneItem( string strBarcodeOrRecPath, ListView list, string strMatchLocation, out string strError) { strError = ""; // 判断是否有 @path: 前缀,便于后面分支处理 bool bIsRecPath = StringUtil.HasHead(strBarcodeOrRecPath, "@path:"); ; string strItemXml = ""; string strBiblioText = ""; string strItemRecPath = ""; string strBiblioRecPath = ""; byte[] item_timestamp = null; long lRet = Channel.GetItemInfo( stop, strBarcodeOrRecPath, "xml", out strItemXml, out strItemRecPath, out item_timestamp, "recpath", out strBiblioText, out strBiblioRecPath, out strError); if (lRet == -1 || lRet == 0) { ListViewItem item = null; if (bIsRecPath == false) item = new ListViewItem(strBarcodeOrRecPath, 0); else item = new ListViewItem("", 0); // 暂时还没有办法知道条码 // 2009/10/29 OriginItemData data = new OriginItemData(); item.Tag = data; data.Timestamp = item_timestamp; data.Xml = strItemXml; ListViewUtil.ChangeItemText(item, COLUMN_ERRORINFO, strError); // item.SubItems.Add(strError); SetItemColor(item, TYPE_ERROR); list.Items.Add(item); // 将新加入的事项滚入视野 list.EnsureVisible(list.Items.Count - 1); goto ERROR1; } string strBiblioSummary = ""; string strISBnISSN = ""; string strTargetRecPath = ""; // 看看册条码号是否有重复? // 顺便获得同种的事项 for (int i = 0; i < list.Items.Count; i++) { ListViewItem curitem = list.Items[i]; if (bIsRecPath == false) { if (strBarcodeOrRecPath == curitem.Text) { strError = "册条码号 " + strBarcodeOrRecPath + " 发生重复"; return -2; } } else { if (strBarcodeOrRecPath == ListViewUtil.GetItemText(curitem, COLUMN_RECPATH)) { strError = "记录路径 " + strBarcodeOrRecPath + " 发生重复"; return -2; } } if (strBiblioSummary == "" && curitem.ImageIndex != TYPE_ERROR) { if (curitem.SubItems[COLUMN_BIBLIORECPATH].Text == strBiblioRecPath) { strBiblioSummary = ListViewUtil.GetItemText(curitem, COLUMN_SUMMARY); strISBnISSN = ListViewUtil.GetItemText(curitem, COLUMN_ISBNISSN); strTargetRecPath = ListViewUtil.GetItemText(curitem, COLUMN_TARGETRECPATH); } } } if (strBiblioSummary == "") { string[] formats = new string[3]; formats[0] = "summary"; formats[1] = "@isbnissn"; formats[2] = "targetrecpath"; string[] results = null; byte[] timestamp = null; Debug.Assert(String.IsNullOrEmpty(strBiblioRecPath) == false, "strBiblioRecPath值不能为空"); lRet = Channel.GetBiblioInfos( stop, strBiblioRecPath, "", formats, out results, out timestamp, out strError); if (lRet == -1 || lRet == 0) { if (lRet == 0 && String.IsNullOrEmpty(strError) == true) strError = "书目记录 '" + strBiblioRecPath + "' 不存在"; strBiblioSummary = "获得书目摘要时发生错误: " + strError; } else { Debug.Assert(results != null && results.Length == 3, "results必须包含3个元素"); strBiblioSummary = results[0]; strISBnISSN = results[1]; strTargetRecPath = results[2]; } } // 剖析一个册的xml记录,取出有关信息放入listview中 XmlDocument dom = new XmlDocument(); try { dom.LoadXml(strItemXml); } catch (Exception ex) { strError = ex.Message; goto ERROR1; } // 附加的馆藏地点匹配 if (strMatchLocation != null) { string strLocation = DomUtil.GetElementText(dom.DocumentElement, "location"); // 2013/3/26 if (strLocation == null) strLocation = ""; if (strMatchLocation != strLocation) return 0; } { ListViewItem item = AddToListView(list, dom, strItemRecPath, strBiblioSummary, strISBnISSN, strBiblioRecPath, strTargetRecPath); // 设置timestamp/xml OriginItemData data = (OriginItemData)item.Tag; Debug.Assert(data != null, ""); data.Timestamp = item_timestamp; data.Xml = strItemXml; if (this.comboBox_load_type.Text == "连续出版物") { // 检查是否为合订册记录或者单册记录。不能为合订成员 // return: // 0 不是。图标已经设置为TYPE_ERROR // 1 是。图标尚未设置 int nRet = CheckBindingItem(item); if (nRet == 1) { // 图标 SetItemColor(item, TYPE_NORMAL); } } else { Debug.Assert(this.comboBox_load_type.Text == "图书", ""); // 图标 SetItemColor(item, TYPE_NORMAL); } // 将新加入的事项滚入视野 list.EnsureVisible(list.Items.Count - 1); // 检查条码号 if (bIsRecPath == false) { string strBarcode = DomUtil.GetElementText(dom.DocumentElement, "barcode"); if (strBarcode != strBarcodeOrRecPath) { if (strBarcode.ToUpper() == strBarcodeOrRecPath.ToUpper()) strError = "用于检索的条码号 '" + strBarcodeOrRecPath + "' 和册记录中的条码号 '" + strBarcode + "' 大小写不一致"; else strError = "用于检索的条码号 '" + strBarcodeOrRecPath + "' 和册记录中的条码号 '" + strBarcode + "' 不一致"; ListViewUtil.ChangeItemText(item, COLUMN_ERRORINFO, strError); SetItemColor(item, TYPE_ERROR); goto ERROR1; } } } return 1; ERROR1: return -1; }
// 即将废止 // 根据册记录DOM设置ListViewItem除第一列以外的文字 // 本函数会自动把事项的data.Changed设置为false // parameters: // bSetBarcodeColumn 是否要设置条码列内容(第一列) static void SetListViewItemText(XmlDocument dom, bool bSetBarcodeColumn, string strRecPath, string strBiblioSummary, string strISBnISSN, string strBiblioRecPath, string strTargetRecPath, ListViewItem item) { OriginItemData data = null; data = (OriginItemData)item.Tag; if (data == null) { data = new OriginItemData(); item.Tag = data; } else { data.Changed = false; } string strState = DomUtil.GetElementText(dom.DocumentElement, "state"); string strLocation = DomUtil.GetElementText(dom.DocumentElement, "location"); string strPrice = DomUtil.GetElementText(dom.DocumentElement, "price"); string strBookType = DomUtil.GetElementText(dom.DocumentElement, "bookType"); string strRegisterNo = DomUtil.GetElementText(dom.DocumentElement, "registerNo"); string strComment = DomUtil.GetElementText(dom.DocumentElement, "comment"); string strMergeComment = DomUtil.GetElementText(dom.DocumentElement, "mergeComment"); string strBatchNo = DomUtil.GetElementText(dom.DocumentElement, "batchNo"); string strBorrower = DomUtil.GetElementText(dom.DocumentElement, "borrower"); string strBorrowDate = DomUtil.GetElementText(dom.DocumentElement, "borrowDate"); string strAccessNo = DomUtil.GetElementText(dom.DocumentElement, "accessNo"); // 2007/6/20 strBorrowDate = DateTimeUtil.LocalTime(strBorrowDate, "u"); string strBorrowPeriod = DomUtil.GetElementText(dom.DocumentElement, "borrowPeriod"); ListViewUtil.ChangeItemText(item, COLUMN_SUMMARY, strBiblioSummary); ListViewUtil.ChangeItemText(item, COLUMN_ACCESSNO, strAccessNo); ListViewUtil.ChangeItemText(item, COLUMN_ISBNISSN, strISBnISSN); ListViewUtil.ChangeItemText(item, COLUMN_STATE, strState); ListViewUtil.ChangeItemText(item, COLUMN_LOCATION, strLocation); ListViewUtil.ChangeItemText(item, COLUMN_PRICE, strPrice); ListViewUtil.ChangeItemText(item, COLUMN_BOOKTYPE, strBookType); ListViewUtil.ChangeItemText(item, COLUMN_REGISTERNO, strRegisterNo); ListViewUtil.ChangeItemText(item, COLUMN_COMMENT, strComment); ListViewUtil.ChangeItemText(item, COLUMN_MERGECOMMENT, strMergeComment); ListViewUtil.ChangeItemText(item, COLUMN_BATCHNO, strBatchNo); ListViewUtil.ChangeItemText(item, COLUMN_BORROWER, strBorrower); ListViewUtil.ChangeItemText(item, COLUMN_BORROWDATE, strBorrowDate); ListViewUtil.ChangeItemText(item, COLUMN_BORROWPERIOD, strBorrowPeriod); ListViewUtil.ChangeItemText(item, COLUMN_RECPATH, strRecPath); ListViewUtil.ChangeItemText(item, COLUMN_BIBLIORECPATH, strBiblioRecPath); ListViewUtil.ChangeItemText(item, COLUMN_TARGETRECPATH, strTargetRecPath); if (bSetBarcodeColumn == true) { string strBarcode = DomUtil.GetElementText(dom.DocumentElement, "barcode"); ListViewUtil.ChangeItemText(item, COLUMN_BARCODE, strBarcode); } SetItemColor(item, TYPE_NORMAL); }
// 根据册记录DOM设置ListViewItem除第一列以外的文字 // 本函数会自动把事项的data.Changed设置为false // parameters: // bSetBarcodeColumn 是否要设置条码列内容(第一列) /*public*/ static void SetListViewItemText(XmlDocument dom, bool bSetBarcodeColumn, string strRecPath, string strBiblioSummary, string strISBnISSN, string strBiblioRecPath, ListViewItem item) { OriginItemData data = null; data = (OriginItemData)item.Tag; if (data == null) { data = new OriginItemData(); item.Tag = data; } else { data.Changed = false; } string strState = DomUtil.GetElementText(dom.DocumentElement, "state"); string strPublishTime = DomUtil.GetElementText(dom.DocumentElement, "publishTime"); string strVolume = DomUtil.GetElementText(dom.DocumentElement, "volume"); string strLocation = DomUtil.GetElementText(dom.DocumentElement, "location"); string strPrice = DomUtil.GetElementText(dom.DocumentElement, "price"); string strBookType = DomUtil.GetElementText(dom.DocumentElement, "bookType"); string strRegisterNo = DomUtil.GetElementText(dom.DocumentElement, "registerNo"); string strComment = DomUtil.GetElementText(dom.DocumentElement, "comment"); string strMergeComment = DomUtil.GetElementText(dom.DocumentElement, "mergeComment"); string strBatchNo = DomUtil.GetElementText(dom.DocumentElement, "batchNo"); string strAccessNo = DomUtil.GetElementText(dom.DocumentElement, "accessNo"); string strRefID = DomUtil.GetElementText(dom.DocumentElement, "refID"); /* string strBinding = DomUtil.GetElementInnerXml(dom.DocumentElement, "binding"); * */ string strIntact = DomUtil.GetElementText(dom.DocumentElement, "intact"); string strSeller = DomUtil.GetElementText(dom.DocumentElement, "seller"); string strSource = DomUtil.GetElementText(dom.DocumentElement, "source"); /* string strBorrower = DomUtil.GetElementText(dom.DocumentElement, "borrower"); string strBorrowDate = DomUtil.GetElementText(dom.DocumentElement, "borrowDate"); // 2007/6/20 strBorrowDate = DateTimeUtil.LocalTime(strBorrowDate, "u"); string strBorrowPeriod = DomUtil.GetElementText(dom.DocumentElement, "borrowPeriod"); strBorrowDate = DateTimeUtil.LocalTime(strBorrowDate, "u"); string strBorrowPeriod = DomUtil.GetElementText(dom.DocumentElement, "borrowPeriod"); * */ ListViewUtil.ChangeItemText(item, COLUMN_SUMMARY, strBiblioSummary); ListViewUtil.ChangeItemText(item, COLUMN_STATE, strState); ListViewUtil.ChangeItemText(item, COLUMN_ACCESSNO, strAccessNo); ListViewUtil.ChangeItemText(item, COLUMN_PUBLISHTIME, strPublishTime); ListViewUtil.ChangeItemText(item, COLUMN_VOLUME, strVolume); ListViewUtil.ChangeItemText(item, COLUMN_ISBNISSN, strISBnISSN); ListViewUtil.ChangeItemText(item, COLUMN_LOCATION, strLocation); ListViewUtil.ChangeItemText(item, COLUMN_PRICE, strPrice); ListViewUtil.ChangeItemText(item, COLUMN_BOOKTYPE, strBookType); ListViewUtil.ChangeItemText(item, COLUMN_REGISTERNO, strRegisterNo); ListViewUtil.ChangeItemText(item, COLUMN_COMMENT, strComment); ListViewUtil.ChangeItemText(item, COLUMN_MERGECOMMENT, strMergeComment); ListViewUtil.ChangeItemText(item, COLUMN_BATCHNO, strBatchNo); /* ListViewUtil.ChangeItemText(item, COLUMN_BORROWER, strBorrower); ListViewUtil.ChangeItemText(item, COLUMN_BORROWDATE, strBorrowDate); ListViewUtil.ChangeItemText(item, COLUMN_BORROWPERIOD, strBorrowPeriod); * */ ListViewUtil.ChangeItemText(item, COLUMN_RECPATH, strRecPath); ListViewUtil.ChangeItemText(item, COLUMN_BIBLIORECPATH, strBiblioRecPath); ListViewUtil.ChangeItemText(item, COLUMN_REFID, strRefID); ListViewUtil.ChangeItemText(item, COLUMN_SELLER, strSeller); ListViewUtil.ChangeItemText(item, COLUMN_SOURCE, strSource); ListViewUtil.ChangeItemText(item, COLUMN_INTACT, strIntact); if (bSetBarcodeColumn == true) { string strBarcode = DomUtil.GetElementText(dom.DocumentElement, "barcode"); ListViewUtil.ChangeItemText(item, COLUMN_BARCODE, strBarcode); } }