using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data; namespace SiaSun.LMS.WPFClient.UC { /// /// ucRelationEdit.xaml 的交互逻辑 /// public partial class ucRelationEdit : UserControl { string strRelationCode = string.Empty; Model.SYS_RELATION mSYS_RELATION = null; string strTable1, strTable2; string strWhere = string.Empty; string strOrderFields = string.Empty; /// /// 权限关系编码 /// public string U_RelationCode { get { return strRelationCode; } set { strRelationCode = value; } } /// /// 查询条件 /// public string U_Where { get { return strWhere; } set { strWhere = value; } } /// /// 排序 /// public string U_OrderFields { get { return strOrderFields; } set { strOrderFields = value; } } public ucRelationEdit() { InitializeComponent(); } /// /// 初始化控件 /// public void U_InitControl() { //获得关系实例 mSYS_RELATION = MainApp._I_SystemService.RELATION_GetModel(strRelationCode); if (mSYS_RELATION == null) return; //获得显示名称 string[] arStrHeaderText = mSYS_RELATION.RELATION_NAME.Split('-'); if (arStrHeaderText.Length == 2) { this.grpboxQuery.Header = string.Format(this.grpboxQuery.Header.ToString(),arStrHeaderText[0]); this.grpboxUnSelected.Header = string.Format( this.grpboxUnSelected.Header.ToString(),arStrHeaderText[1]); this.grpboxSelected.Header = string.Format(this.grpboxSelected.Header.ToString(),arStrHeaderText[1]); } //分解表名称 string[] arStrTableName = mSYS_RELATION.RELATION_CODE.Split('-'); if (arStrTableName.Length == 2) { strTable1 = arStrTableName[0]; strTable2 = arStrTableName[1]; //显示项目列表 RelationItem_Bind(); } } /// /// 权限管理项目列表 /// private void RelationItem_Bind() { try { this.gridQuery.U_TableName = strTable1; this.gridQuery.U_Fields = "*"; this.gridQuery.U_OrderField = mSYS_RELATION.RELATION_ID1; this.gridQuery.U_AllowOperatData = false; this.gridQuery.U_AllowChecked = false; this.gridQuery.U_AllowPage = false; //筛选条件 if (MainApp._ROLE.ROLE_ID != 0) { this.gridQuery.U_Where = mSYS_RELATION.RELATION_ID1 + string.Format("<>{0}", 0); } //初始化 this.gridQuery.U_InitControl(); this.gridQuery.gridApp.SelectionChanged += new SelectionChangedEventHandler(gridApp_SelectionChanged); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } /// /// 选择行,显示关系数据 /// void gridApp_SelectionChanged(object sender, SelectionChangedEventArgs e) { this.LoadRelation(); } /// /// 加载关系数据 /// private void LoadRelation() { if (this.gridQuery.gridApp.SelectedItem == null) return; try { DataRowView rowView = this.gridQuery.gridApp.SelectedItem as DataRowView; if (rowView == null) return; //清空显示项目 this.lboxSelected.Items.Clear(); this.lboxUnSelected.Items.Clear(); //获得关联的ID1 int intID1 = Convert.ToInt32(rowView[mSYS_RELATION.RELATION_ID1]); string strAppendWhere = MainApp._ROLE.ROLE_ID == 0 ? "1=1" : mSYS_RELATION.RELATION_ID2 + string.Format(">0"); //加载所有的项目 DataTable tableItem = MainApp._I_BaseService.GetList(string.Format("SELECT {0},{1} FROM {2} WHERE {3} {4}", mSYS_RELATION.RELATION_ID2, mSYS_RELATION.RELATON_NAME2, strTable2, (strWhere.Length == 0 ? strAppendWhere : strAppendWhere + " AND " + strWhere), strOrderFields == string.Empty ? string.Empty: string.Format(" ORDER BY {0}",strOrderFields))); //加载所有存在的关系列表 IList listRELATON_LIST = MainApp._I_SystemService.RELATION_LIST_GetList_ID1(mSYS_RELATION.RELATION_ID, intID1); //显示未选择项目 Relation_Bind(intID1, tableItem, listRELATON_LIST); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } /// /// 显示未选择项目 /// private void Relation_Bind(int ID1, DataTable tableAll, IList listRELATON_LIST) { foreach (DataRow row in tableAll.Rows) { //获得关联的ID2 int intID2 = Convert.ToInt32(row[mSYS_RELATION.RELATION_ID2]); //判断是否选择 if (listRELATON_LIST.Count(r => r.RELATION_ID2 == intID2) > 0) { AddImageItem(lboxSelected, row[mSYS_RELATION.RELATON_NAME2].ToString(), intID2); } else { AddImageItem(lboxUnSelected, row[mSYS_RELATION.RELATON_NAME2].ToString(), intID2); } } } /// /// 添加列表项目 /// private void AddImageItem(ListBox listBox, string text, object tag) { ListBoxItem item = new ListBoxItem(); item.BeginInit(); item.MouseDoubleClick += new MouseButtonEventHandler(item_MouseDoubleClick); item.Margin = new Thickness(3); item.Tag = tag; listBox.Items.Add(item); //添加显示内容 StackPanel panelItem = new StackPanel(); panelItem.Tag = tag; panelItem.Orientation = Orientation.Horizontal; item.Content = panelItem; //添加图像 Image imageItem = new Image(); imageItem.Margin = new Thickness(5,2,10,2); panelItem.Children.Add(imageItem); //获得图像路径 //Uri url = new Uri(MainApp._APP_PATH + @"\@Images\report.png", UriKind.Absolute); Uri url = new Uri("/@Images/report.png", UriKind.RelativeOrAbsolute); BitmapImage imageURI = new BitmapImage(url); imageItem.Source = imageURI; //添加描述 TextBlock txtHeader = new TextBlock(); txtHeader.VerticalAlignment = System.Windows.VerticalAlignment.Center; txtHeader.Text = text; panelItem.Children.Add(txtHeader); item.EndInit(); } /// /// 添加或取消选择 /// private void StackPanel_Click(object sender, RoutedEventArgs e) { Button btn = e.OriginalSource as Button; if (btn != null) { ListBoxItem[] arItems = null; switch (btn.Name) { case "btnSelect": arItems = this.lboxUnSelected.SelectedItems.Cast().ToArray(); break; case "btnUnSelect": arItems = this.lboxSelected.SelectedItems.Cast().ToArray(); break; } //添加选择 if (arItems.Length > 0) { foreach (ListBoxItem item in arItems) { this.ExchangeItem(item); } } } } /// /// 双击移除选项 /// void item_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ListBoxItem itemSelected = e.Source as ListBoxItem; if (itemSelected != null) { this.ExchangeItem(itemSelected); } } /// /// 交换选项 /// private void ExchangeItem(ListBoxItem item) { if (lboxUnSelected.Items.Contains(item)) { lboxUnSelected.Items.Remove(item); lboxSelected.Items.Add(item); } else if (lboxSelected.Items.Contains(item)) { lboxSelected.Items.Remove(item); lboxUnSelected.Items.Add(item); } } #region ------按钮操作 /// /// 按钮事件 /// private void WrapPanel_Click(object sender, RoutedEventArgs e) { Button btn = e.OriginalSource as Button; if (btn != null) { switch (btn.Name) { case "btnSave": this.Save(); break; case "btnRefresh": this.LoadRelation(); break; } } } //保存 private void Save() { if (this.gridQuery.U_SelectedItem == null) return; if (MainApp._MessageDialog.ShowDialog("Save",null) == Sid.Windows.Controls.TaskDialogResult.Ok) { try { DataRowView rowView = this.gridQuery.U_SelectedItem as DataRowView; if (rowView == null) return; //获得关联的ID1 int intID1 = Convert.ToInt32(rowView[mSYS_RELATION.RELATION_ID1]); //get all warehouses's id int[] arRelationID2 = new int[this.lboxSelected.Items.Count]; for (int i = 0; i < lboxSelected.Items.Count; i++) { arRelationID2[i] = Convert.ToInt32((lboxSelected.Items[i] as ListBoxItem).Tag.ToString()); } //Commit data string strMessage = string.Empty; bool boolResult = MainApp._I_SystemService.RELATION_LIST_Add(strRelationCode, intID1, arRelationID2, out strMessage); MainApp._MessageDialog.ShowResult(boolResult, strMessage); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } } #endregion #region ------上下文菜单-排序 //上下文菜单事件 private void ContextMenu_Click(object sender, RoutedEventArgs e) { MenuItem menuItem = e.OriginalSource as MenuItem; if (menuItem != null) { switch (menuItem.Name) { case "menuItemUnSelectedOrder": OrderListBoxItems(lboxUnSelected); break; case "menuItemSelectedOrder": OrderListBoxItems(lboxSelected); break; } } } /// /// 重新排序 /// private void OrderListBoxItems(ListBox lsBox) { if (lsBox.HasItems) { IList listItem = new List(); for (int i = lsBox.Items.Count - 1; i >= 0; i--) { ListBoxItem item = lsBox.Items[i] as ListBoxItem; lsBox.Items.Remove(item); listItem.Add(item); } //排序添加 foreach (ListBoxItem item in listItem.OrderBy(r => r.Content.ToString())) { lsBox.Items.Add(item); } } } #endregion } }