// 获得一个列可用的全部 sort style public List <ColumnSortStyle> GetAllSortStyle(ListView list, int nColumn) { List <ColumnSortStyle> styles = new List <ColumnSortStyle>(); styles.Add(ColumnSortStyle.None); // 没有 styles.Add(ColumnSortStyle.LeftAlign); // 左对齐字符串 styles.Add(ColumnSortStyle.RightAlign); // 右对齐字符串 styles.Add(ColumnSortStyle.RecPath); // 记录路径。例如“中文图书/1”,以'/'为界,右边部分当作数字值排序。或者“localhost/中文图书/ctlno/1” styles.Add(ColumnSortStyle.LongRecPath); // 记录路径。例如“中文图书/1 @本地服务器” // 寻找标题 .Tag 中的定义 if (nColumn < list.Columns.Count) { ColumnHeader header = list.Columns[nColumn]; ColumnProperty prop = (ColumnProperty)header.Tag; if (prop != null) { if (string.IsNullOrEmpty(prop.Type) == false) { ColumnSortStyle default_style = new ColumnSortStyle(prop.Type); if (styles.IndexOf(default_style) == -1) { styles.Add(default_style); } } } } return(styles); }
private void listView_browse_ColumnClick(object sender, ColumnClickEventArgs e) { int nClickColumn = e.Column; ColumnSortStyle sortStyle = ColumnSortStyle.LeftAlign; // 第一列为记录路径,排序风格特殊 if (nClickColumn == 0) { sortStyle = ColumnSortStyle.RecPath; } else if (nClickColumn == 1) { sortStyle = ColumnSortStyle.RightAlign; } this.SortColumns.SetFirstColumn(nClickColumn, sortStyle, this.listView_browse.Columns, true); // 排序 this.listView_browse.ListViewItemSorter = new SortColumnsComparer(this.SortColumns); this.listView_browse.ListViewItemSorter = null; }
public ColumnSortStyle GetSortStyle(ListView list, int nColumn) { ColumnSortStyle result = null; if (this.SortStyles.Count <= nColumn) { } else { result = SortStyles[nColumn]; } if (result == null || result == ColumnSortStyle.None) { // 寻找标题 .Tag 中的定义 if (nColumn < list.Columns.Count) { ColumnHeader header = list.Columns[nColumn]; ColumnProperty prop = (ColumnProperty)header.Tag; if (prop != null) { if (string.IsNullOrEmpty(prop.Type) == false) { return(new ColumnSortStyle(prop.Type)); } } } } return(result); }
static string GetSortStyleCaption(ColumnSortStyle style) { string strName = style.Name; if (string.IsNullOrEmpty(strName) == true) { return("[None]"); } // 将 call_number 形态转换为 CallNumber 形态 string[] parts = strName.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); StringBuilder text = new StringBuilder(4096); foreach (string s in parts) { if (string.IsNullOrEmpty(s) == true) { continue; } text.Append(char.ToUpper(s[0])); if (s.Length > 1) { text.Append(s.Substring(1)); } } return(text.ToString()); }
private void listView_channel_ColumnClick(object sender, ColumnClickEventArgs e) { int nClickColumn = e.Column; ColumnSortStyle sortStyle = ColumnSortStyle.LeftAlign; if (nClickColumn == COLUMN_COUNT || nClickColumn == COLUMN_CALLCOUNT) { sortStyle = ColumnSortStyle.RightAlign; } else if (nClickColumn == COLUMN_IP) { sortStyle = ColumnSortStyle.IpAddress; } this.SortColumns.SetFirstColumn(nClickColumn, sortStyle, this.listView_channel.Columns, true); // 排序 this.listView_channel.ListViewItemSorter = new SortColumnsComparer(this.SortColumns); // this.listView1.ListViewItemSorter = null; }
private void listView_records_ColumnClick(object sender, ColumnClickEventArgs e) { int nClickColumn = e.Column; ColumnSortStyle sortStyle = ColumnSortStyle.LeftAlign; // 第一列为普通字符串,第二列为数字字符串 if (nClickColumn == 0) { sortStyle = ColumnSortStyle.LeftAlign; } else if (nClickColumn == 1) { sortStyle = ColumnSortStyle.RightAlign; } this.SortColumns.SetFirstColumn(nClickColumn, sortStyle, this.listView_records.Columns, true); // 排序 this.listView_records.ListViewItemSorter = new SortColumnsComparer(this.SortColumns); this.listView_records.ListViewItemSorter = null; }
// 响应鼠标右键点击栏目标题的动作,出现上下文菜单 public static void OnColumnContextMenuClick(ListView list, ColumnClickEventArgs e) { int nClickColumn = e.Column; ListViewProperty prop = GetListViewProperty(list); if (prop == null) { throw new Exception("ListView的Tag没有包含ListViewProperty对象"); } #if NO ColumnSortStyle sortStyle = prop.GetSortStyle(nClickColumn); prop.SortColumns.SetFirstColumn(nClickColumn, sortStyle, list.Columns, true); #endif ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripMenuItem menuItem = null; ToolStripMenuItem subMenuItem = null; // list.Columns[nClickColumn].Text menuItem = new ToolStripMenuItem("设置排序方式"); contextMenu.Items.Add(menuItem); ColumnSortStyle sortStyle = prop.GetSortStyle(list, nClickColumn); if (sortStyle == null) { sortStyle = ColumnSortStyle.None; } List <ColumnSortStyle> all_styles = prop.GetAllSortStyle(list, nClickColumn); foreach (ColumnSortStyle style in all_styles) { subMenuItem = new ToolStripMenuItem(); subMenuItem.Text = GetSortStyleCaption(style); SetSortStyleParam param = new SetSortStyleParam(); param.ColumnIndex = nClickColumn; param.prop = prop; param.Style = style; subMenuItem.Tag = param; subMenuItem.Click += new EventHandler(menu_setSortStyle_Click); if (style == sortStyle) { subMenuItem.Checked = true; } menuItem.DropDown.Items.Add(subMenuItem); } Point p = list.PointToClient(Control.MousePosition); contextMenu.Show(list, p); }
// 响应点击栏目标题的动作,进行排序 // parameters: // bClearSorter 是否在排序后清除 sorter 函数 public static void OnColumnClick(ListView list, ColumnClickEventArgs e, bool bClearSorter = true) { int nClickColumn = e.Column; ListViewProperty prop = GetListViewProperty(list); if (prop == null) { throw new Exception("ListView的Tag没有包含ListViewProperty对象"); } // 2013/3/31 // 如果标题栏没有初始化,则需要先初始化 if (list.SelectedItems.Count == 0 && list.Items.Count > 0) { list.Items[0].Selected = true; OnSelectedIndexChanged(list, 0, null); list.Items[0].Selected = false; } ColumnSortStyle sortStyle = prop.GetSortStyle(list, nClickColumn); prop.SortColumns.SetFirstColumn(nClickColumn, sortStyle, list.Columns, true); // 排序 SortColumnsComparer sorter = new SortColumnsComparer(prop.SortColumns); if (prop.HasCompareColumnEvent() == true) { sorter.EventCompare += (sender1, e1) => { prop.OnCompareColumn(sender1, e1); }; } list.ListViewItemSorter = sorter; if (bClearSorter == true) { list.ListViewItemSorter = null; } }
public void SetSortStyle(int nColumn, ColumnSortStyle style) { // 确保元素足够 while (this.SortStyles.Count < nColumn + 1) { this.SortStyles.Add(null); // 或者 .None // 缺省的 ColumnSortStyle.LeftAlign } this.SortStyles[nColumn] = style; // 2013/3/27 // 刷新 SortColumns foreach (Column column in this.SortColumns) { if (column.No == nColumn) { column.SortStyle = style; } } }
public void SortCol(int nClickColumn) { ColumnSortStyle sortStyle = ColumnSortStyle.LeftAlign; // 第一列为记录路径,排序风格特殊 if (nClickColumn == 0) { sortStyle = ColumnSortStyle.RecPath; } this.SortColumns1.SetFirstColumn(nClickColumn, sortStyle, this.listView_results.Columns, true); // 排序 this.listView_results.ListViewItemSorter = new SortColumnsComparer(this.SortColumns1); this.listView_results.ListViewItemSorter = null; }
/// <summary> /// 构造函数 /// </summary> public ManagerForm() { InitializeComponent(); this.listView_opacDatabases.SmallImageList = this.imageList_opacDatabaseType; this.listView_opacDatabases.LargeImageList = this.imageList_opacDatabaseType; this.listView_databases.SmallImageList = this.imageList_opacDatabaseType; this.listView_databases.LargeImageList = this.imageList_opacDatabaseType; this.treeView_opacBrowseFormats.ImageList = this.imageList_opacBrowseFormatType; this.treeView_zhongcihao.ImageList = this.imageList_zhongcihao; this.treeView_arrangement.ImageList = this.imageList_arrangement; ListViewProperty prop = new ListViewProperty(); this.listView_calendar.Tag = prop; ColumnSortStyle style = new ColumnSortStyle("calendar_name"); style.CompareFunc += new CompareEventHandler(prop_CompareColumn); // 第一列特殊,记录路径 prop.SetSortStyle(0, style); //prop.CompareColumn -= new CompareEventHandler(prop_CompareColumn); //prop.CompareColumn += new CompareEventHandler(prop_CompareColumn); this.loanPolicyControlWrapper1.LoanPolicyControl.Owner = this; this.loanPolicyControlWrapper1.PropertyChanged += new PropertyChangedEventHandler(loanPolicyControlWrapper1_PropertyChanged); ListViewProperty prop1 = new ListViewProperty(); this.listView_location_list.Tag = prop1; }
int DoSearch(out string strError) { strError = ""; /* * string strServerName = ""; * * strServerName = this.textBox_serverName.Text; * * if (String.IsNullOrEmpty(strServerName) == true) * { * // 如果servername text为空,则从发起路径中获得servername * strServerName = GetServerName(this.RecordPath); * if (String.IsNullOrEmpty(strServerName) == true) * { * strError = "在没有指定服务器名的情况下,必须指定发起路径"; * return -1; * } * }*/ string strProjectName = ""; if (this.comboBox_projectName.Text == "" || this.comboBox_projectName.Text == "{default}" || this.comboBox_projectName.Text == "<default>" || this.comboBox_projectName.Text == "<默认>") { // 获得和一个来源路径相关的缺省查重方案 string strDatabasePath = ""; strProjectName = GetDefaultProjectName(this.RecordPath, out strDatabasePath); if (String.IsNullOrEmpty(strProjectName) == true) { strError = "没有定义和发起数据库 '" + strDatabasePath + "' 关联的缺省查重方案,因此无法进行查重..."; return(-1); } this.comboBox_projectName.Text = strProjectName; // 将实际用到的查重方案名显示出来 } else { strProjectName = this.comboBox_projectName.Text; } this.m_nodeProject = this.dom.DocumentElement.SelectSingleNode("//project[@name='" + strProjectName + "']"); if (this.m_nodeProject == null) { strError = "没有定义名字为 '" + strProjectName + "' 的查重方案"; return(-1); } stop.OnStop += new StopEventHandler(this.DoStop); stop.SetMessage("开始检索 ..."); stop.BeginLoop(); this.Update(); this.EnableControls(false); this.EventFinish.Reset(); this.m_bInSearch = true; try { this.ClearDupState(true); this.listView_browse.Items.Clear(); // 列出<project>元素下的所有<database>元素 XmlNodeList databases = this.m_nodeProject.SelectNodes("database"); for (int i = 0; i < databases.Count; i++) { XmlNode nodeDatabase = databases[i]; int nRet = DoOneDatabase( nodeDatabase, out strError); if (nRet == -1) { return(-1); } } // 排序 { ColumnSortStyle sortStyle = ColumnSortStyle.RightAlign; this.SortColumns.SetFirstColumn(1, sortStyle, this.listView_browse.Columns, true); this.SortColumns[0].Asc = false; // 大的在前 this.SortColumns.RefreshColumnDisplay(this.listView_browse.Columns); // 排序 this.listView_browse.ListViewItemSorter = new SortColumnsComparer(this.SortColumns); this.listView_browse.ListViewItemSorter = null; } // 显示查重状态 this.SetDupState(); } finally { this.EventFinish.Set(); this.m_bInSearch = false; stop.EndLoop(); stop.OnStop -= new StopEventHandler(this.DoStop); stop.Initial(""); EnableControls(true); } // 命中数 return(this.listView_browse.Items.Count); }