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.Views.Grid; using DevExpress.XtraGrid.Columns; using Lskj.Data; using Lskj.Util; using DevExpress.XtraGrid.Views.Base; using Lskj.Control.Properties; using Lskj.Business.Impl; namespace Lskj.Control.Model.MenuStrip { public class BandedGridMenuStrip : BaseRightMenu { private int _oldRowHandler; private GridView _gridView; protected BandedGridControlEx BandedGridControlObj; private MyControl _control; 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.BandedGridControlObj = view as BandedGridControlEx; if (this.BandedGridControlObj != null) { this.BaseGridView = this._gridView = this.BandedGridControlObj.GridView; this._control = control; this.BandedGridControlObj.gridControl.ContextMenuStrip = base.MenuStrip; } } protected override void MenuStripOpening(object sender, System.ComponentModel.CancelEventArgs e) { int[] mSelectRows = this._gridView.GetSelectedRows(); if (mSelectRows == null || mSelectRows.Length == 0) return; DataRow mSelectRow = this._gridView.GetDataRow(mSelectRows[0]); ContextMenuStrip cmsMenu = (ContextMenuStrip)sender; cmsMenu.Items.Clear(); cmsMenu.Items.AddRange(this.RightMenuItems.ToArray()); // 创建QQ、浏览器右键菜单 List mQQArray = new List(); List mBrowerArray = new List(); foreach (GridColumn column in this._gridView.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._gridView != null) { GridCell[] cells = this._gridView.GetSelectedCells(); if (cells != null && cells.Length > 0 && cond.Contains("{COLUMN_")) { GridCell 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(cell.Column.Name, cell.Column.Caption, colValue); } } if (ControlObj != null) cond = ControlObj.ReplaceParentControlValue(cond); //cms.Enabled = ReplaceHelper.EvalCond(cond); if (model.ForbiddenDisplay) { cms.Visible = ValidateCond(cond, null); ; } cms.Enabled = ValidateCond(cond, null); ; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(ResourceKeys.SetRightMenuCondFault + "\r\n" + Message); break; } } } } } protected override DataRow[] GetSelectedRows() { return this.BandedGridControlObj.GetViewFocusedDataRows(); } protected override void MenuStripItemClick(object sender, EventArgs e) { base.MenuStripItemClick(sender, e); } protected override void MenuStripClickBefore(ToolStripMenuItem item, GridRightMenuModel model) { this._oldRowHandler = this._gridView.FocusedRowHandle; } protected override void MenuStripClickAfter(ToolStripMenuItem item, GridRightMenuModel model) { this._gridView.ClearSelection(); this._gridView.SelectRowHandler(this._oldRowHandler); } 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._gridView.FocusedColumn.FieldName); } else if ("COLUMN_TITLE".Equals(field)) { handleParamList.Add(this._gridView.FocusedColumn.GetTextCaption()); } else { handleParamList.Add(rowData[field] + ""); } } } return handleParamList; } } }