Пример #1
0
        int FillList(bool bSort,
            out string strError)
        {
            strError = "";
            // int nRet = 0;

            this.listView_number.Items.Clear();
            this.MaxNumber = "";

            // 获得server url
            if (String.IsNullOrEmpty(this.LibraryServerName) == true)
            {
                strError = "尚未指定服务器名";
                goto ERROR1;
            }
            dp2Server server = this.MainForm.Servers.GetServerByName(this.LibraryServerName);
            if (server == null)
            {
                strError = "服务器名为 '" + this.LibraryServerName + "' 的服务器不存在...";
                goto ERROR1;
            }

            string strServerUrl = server.Url;

            this.Channel = this.Channels.GetChannel(strServerUrl);

            /*
            if (dom == null)
            {
                strError = "请先调用GetGlobalCfgFile()函数";
                return -1;
            }
             * */

            if (this.ClassNumber == "")
            {
                strError = "尚未指定分类号";
                return -1;
            }

            if (this.BiblioDbName == "")
            {
                strError = "尚未指定书目库名";
                return -1;
            }

            EnableControls(false);

            stop.OnStop += new StopEventHandler(this.DoStop);
            stop.Initial("正在检索同类书记录 ...");
            stop.BeginLoop();

            this.Update();
            this.MainForm.Update();

            try
            {
                string strQueryXml = "";

                long lRet = Channel.SearchUsedZhongcihao(
                    stop,
                    GetZhongcihaoDbGroupName(this.BiblioDbName),
                    // "!" + this.BiblioDbName,
                    this.ClassNumber,
                    "zhongcihao",
                    out strQueryXml,
                    out strError);
                if (lRet == -1)
                    goto ERROR1;
                if (lRet == 0)
                {
                    strError = "没有命中的记录。";
                    return 0;   // not found
                }


                long lHitCount = lRet;

                long lStart = 0;
                long lPerCount = Math.Min(50, lHitCount);
                ZhongcihaoSearchResult[] searchresults = null;

                if (stop != null)
                    stop.SetProgressRange(0, lHitCount);

                // 装入浏览格式
                for (; ; )
                {
                    Application.DoEvents();	// 出让界面控制权

                    if (stop != null)
                    {
                        if (stop.State != 0)
                        {
                            strError = "用户中断";
                            goto ERROR1;
                        }
                    }

                    long lCurrentPerCount = lPerCount;

                    bool bShift = Control.ModifierKeys == Keys.Shift;
                    string strBrowseStyle = "cols";
                    if (bShift == true || this.checkBox_returnBrowseCols.Checked == false)
                    {
                        strBrowseStyle = "";
                        lCurrentPerCount = lPerCount * 10;
                    }


                    stop.SetMessage("正在装入浏览信息 " + (lStart + 1).ToString() + " - " + (lStart + lPerCount).ToString() + " (命中 " + lHitCount.ToString() + " 条记录) ...");

                    lRet = Channel.GetZhongcihaoSearchResult(
                        stop,
                        GetZhongcihaoDbGroupName(this.BiblioDbName),
                        // "!" + this.BiblioDbName,
                        "zhongcihao",   // strResultSetName
                        lStart,
                        lPerCount,
                        strBrowseStyle, // style
                        this.Lang,
                        out searchresults,
                        out strError);
                    if (lRet == -1)
                        goto ERROR1;

                    if (lRet == 0)
                    {
                        strError = "未命中";
                        goto ERROR1;
                    }

                    // 处理浏览结果
                    for (int i = 0; i < searchresults.Length; i++)
                    {
                        ZhongcihaoSearchResult result_item = searchresults[i];
                        ListViewItem item = new ListViewItem();
                        item.Text = result_item.Path;
                        item.SubItems.Add(result_item.Zhongcihao);

                        if (result_item.Cols != null)
                        {
                            ListViewUtil.EnsureColumns(this.listView_number, result_item.Cols.Length + 1);
                            for (int j = 0; j < result_item.Cols.Length; j++)
                            {
                                ListViewUtil.ChangeItemText(item, j + 2, result_item.Cols[j]);
                            }
                        }

                        this.listView_number.Items.Add(item);
                        if (stop != null)
                            stop.SetProgressValue(lStart + i + 1);
                    }

                    lStart += searchresults.Length;
                    if (lStart >= lHitCount || lPerCount <= 0)
                        break;
                }
            }
            finally
            {
                stop.EndLoop();
                stop.OnStop -= new StopEventHandler(this.DoStop);
                stop.Initial("");
                stop.HideProgress();

                EnableControls(true);
            }

            if (bSort == true)
            {
                // 排序
                this.listView_number.ListViewItemSorter = new ZhongcihaoListViewItemComparer();
                this.listView_number.ListViewItemSorter = null;

                // 把重复种次号的事项用特殊颜色标出来
                ColorDup();

                this.MaxNumber = GetTopNumber(this.listView_number);    // this.listView_number.Items[0].SubItems[1].Text;
            }

            return 0;
        ERROR1:
            return -1;
        }