using System; using System.Collections.Generic; using System.Linq; using System.Text; using DevExpress.XtraTreeList; using System.Data; using Lskj.Model; using DevExpress.XtraTreeList.Nodes; using System.Windows.Forms; using DevExpress.XtraGrid.Columns; using Lskj.Control.Properties; using DevExpress.XtraGrid.Views.Grid; using Lskj.Util; using DevExpress.XtraGrid.Views.Base; using Lskj.Business.Impl; using Lskj.Data; using DevExpress.XtraTreeList.Columns; namespace Lskj.Control.Model.MenuStrip { public class TreeGridViewMenuStrip : BaseRightMenu { private int _oldRowHandler; private TreeList _treeView; private MyControl _control; protected TreeGridControlEx TreeGridControlObj; public override void InitRightMenus(System.Windows.Forms.Control view, DataTable table, DynamicModel model, MyControl control = null, ContextMenuStrip menu = null) { base.InitRightMenus(view, table, model, control, menu); this.TreeGridControlObj = view as TreeGridControlEx; if (this.TreeGridControlObj != null) { this._treeView = this.TreeGridControlObj.TreeListObj; this.TreeGridControlObj.TreeListObj.ContextMenuStrip = base.MenuStrip; } } protected override DataRow[] GetSelectedRows() { return this.TreeGridControlObj.GetViewFocusedDataRows(); } protected override List HandleRightMenuParams(List paramList, DataRow rowData, DataRow[] rowDatas = null, int actionType = 0) { List handleParamList = base.HandleRightMenuParams(paramList, rowData, rowDatas, actionType); foreach (string item in handleParamList) { if (item.StartsWith("{")) { string field = item.Replace("{", "").Replace("}", ""); if ("COLUMN_NAME".Equals(field)) { handleParamList.Add(this._treeView.FocusedColumn.FieldName); } else if ("COLUMN_TITLE".Equals(field)) { handleParamList.Add(this._treeView.FocusedColumn.GetTextCaption()); } else { handleParamList.Add(rowData[field] + ""); } } } return handleParamList; } protected override void MenuStripOpening(object sender, System.ComponentModel.CancelEventArgs e) { DataRow[] mSelectRows = this.TreeGridControlObj.GetViewFocusedDataRows(); if (mSelectRows == null || mSelectRows.Length == 0) return; DataRow mSelectRow = mSelectRows[0]; this._treeView.EndCurrentEdit(); this._treeView.ShowEditor(); ContextMenuStrip cmsMenu = (ContextMenuStrip)sender; cmsMenu.Items.Clear(); cmsMenu.Items.AddRange(this.RightMenuItems.ToArray()); // 创建QQ、浏览器右键菜单 List mQQArray = new List(); List mBrowerArray = new List(); foreach (TreeListColumn column in this._treeView.Columns) { if (!mSelectRow.Table.Columns.Contains(column.Name)) continue; string rowValue = mSelectRow[column.Name] + ""; if (!string.IsNullOrWhiteSpace(rowValue)) { GridColumnModel model = column.Tag as GridColumnModel; if (model == null) continue; if (model.FieldType == ControlType.LabQQ) { ToolStripMenuItem item = new ToolStripMenuItem("(" + column.Caption + ")" + rowValue, Resources.qq); item.Tag = mSelectRow[column.Name] + ""; item.Click += new EventHandler(QQItemClick); mQQArray.Add(item); } if (model.FieldType == ControlType.LabWWW && (rowValue.StartsWith("www.") || rowValue.StartsWith("http://") || rowValue.StartsWith("https://") || rowValue.StartsWith("ftp://") || rowValue.StartsWith("file://"))) { ToolStripMenuItem item = new ToolStripMenuItem("(" + column.Caption + ")" + rowValue, Resources.qq); item.Tag = mSelectRow[column.Name] + ""; item.Click += new EventHandler(BrowerItemClick); mBrowerArray.Add(item); } } } cmsMenu.Items.AddRange(mQQArray.ToArray()); cmsMenu.Items.AddRange(mBrowerArray.ToArray()); // 判断右键菜单是否可用 foreach (ToolStripItem cms in cmsMenu.Items) { GridRightMenuModel model = cms.Tag as GridRightMenuModel; if (model != null) { if (!string.IsNullOrWhiteSpace(model.MenuCond)) { try { string cond = string.Empty; if (this._control != null) cond = _control.ReplaceParentControlValue(model.MenuCond); cond = ReplaceHelper.ReplaceRowParam(mSelectRow, model.MenuCond); if (this._treeView != null) { List cells = this._treeView.GetSelectedCells(); if (cells != null && cells.Count > 0 && cond.Contains("{COLUMN_")) { TreeListCell cell = cells[0]; DataRow focusedRow = this.BaseGridView.GetFocusedDataRow(); string colValue = focusedRow == null || !focusedRow.Table.Columns.Contains(cell.Column.Name) ? "" : focusedRow[cell.Column.Name] + ""; cond = cond.ReplaceColumnParam(