dotNet 环境中汉化xtraGrid控件的函数

Devexpress公司有其推荐的两种本地化方法,这里这个是我一开始没对其了解不深时实现的笨方法,已经放在这里了,就继续放着吧, 可惜的是不明白为什么我个下载的Help中没有关于这方面的详细说明,而非要去它的网站上去查资料才行。

xtraGrid控件的强大和易用性就不用说了,做过数据库的人都应该知道的。 它里面许多部分是以英文的方式呈现给用户的,这就使得我们有必要中文化一下它了。要不怎么呈现给用户啊 。经过1天多的折腾,汗,主要是由于对dotNet还不太熟,不管如何,easy也好,hard也好,总算是折腾出来了。将我所用到的部分都实现中文化了。现在公布代码如下,使用很简单,只要在适当的地方调用一下chineseXtraGrid(DevExpress.XtraGrid.GridControl)
函数就行了。具体内容的实现没怎么经过优化,有需要的朋友自已再随意去修改吧。大家有什么更好的方法或建议,希望能给我留言.

环境:C#, xtraGridV3, 控件包版本2.0.6

#region  汉化xtraGrid部分
  
  public void chineseXtraGrid(DevExpress.XtraGrid.GridControl xg)
  {
   //汉化MainView
   if(xg.LevelTree.LevelTemplate.GetType().Equals(typeof(DevExpress.XtraGrid.Views.Grid.GridView)))
    chineseView((DevExpress.XtraGrid.Views.Grid.GridView)xg.LevelTree.LevelTemplate);
   //汉化子View,即PartenViews
   enumAllViews(xg.LevelTree.Nodes);
  }

  private void enumAllViews(DevExpress.XtraGrid.GridLevelNodeCollection nodeColl)
  {   
   foreach (DevExpress.XtraGrid.GridLevelNode node in nodeColl) {
                if(node.LevelTemplate.GetType().Equals(typeof(DevExpress.XtraGrid.Views.Grid.GridView)))
    {     
     chineseView((DevExpress.XtraGrid.Views.Grid.GridView)node.LevelTemplate);
     if (node.HasChildren)
      enumAllViews(node.Nodes);
    }
   }
  }

  private void chineseView(DevExpress.XtraGrid.Views.Grid.GridView gv)
  {
   gv.OptionsView.ShowAutoFilterRow = true;
#if DEBUG
   gv.OptionsView.ShowFilterPanel = true; 
#else
     gv.OptionsView.ShowFilterPanel = false; 
#endif
   gv.OptionsFilter.ColumnFilterPopupMaxRecordsCount = 0; //不显示所有记录值
   gv.GroupPanelText = "拖动列头到这里实现分组";
   gv.ShowGridMenu += new DevExpress.XtraGrid.Views.Grid.GridMenuEventHandler(gridView_ShowGridMenu);
   gv.GridMenuItemClick += new DevExpress.XtraGrid.Views.Grid.GridMenuItemClickEventHandler(gridView_GridMenuItemClick);
   gv.ShowFilterPopupListBox += new DevExpress.XtraGrid.Views.Grid.FilterPopupListBoxEventHandler(gridView_ShowFilterPopupListBox);
   gv.CustomFilterDialog += new DevExpress.XtraGrid.Views.Grid.CustomFilterDialogEventHandler(gridView_CustomFilterDialog);
  }

  private void gridView_CustomFilterDialog(object sender, DevExpress.XtraGrid.Views.Grid.CustomFilterDialogEventArgs e)
  {   
   DevExpress.XtraGrid.Filter.FilterCustomDialog dlg = new DevExpress.XtraGrid.Filter.FilterCustomDialog(e.Column);
   dlg.Text = "自定义筛选窗口";   
   chineseControl(dlg);
   dlg.ShowDialog();
   e.FilterInfo = null;
   e.Handled = true;
  }
  private Control GetChildControlByName(Control.ControlCollection cc, String sname)
  {
   Control  cl = null;
   foreach(Control ctrl in cc)
   { 
    if ((cl == null) && sname.Equals(ctrl.Name))
     cl = ctrl;
    else if (ctrl.HasChildren)
     cl = GetChildControlByName(ctrl.Controls, sname);    

    if (cl != null) break;
   }
   return cl;
  }
  private void SelectedIndexChanged(object sender, System.EventArgs e)  
  {
   DevExpress.XtraEditors.ComboBoxEdit newc = sender as  DevExpress.XtraEditors.ComboBoxEdit;
   DevExpress.XtraEditors.ComboBoxEdit cc = newc.Tag as DevExpress.XtraEditors.ComboBoxEdit;
   cc.SelectedIndex = newc.SelectedIndex;
  }
  private System.Collections.Specialized.ListDictionary filterDic;

  private void chineseControl(Control ctrl)
  { 
   if (filterDic == null) {
    filterDic = new System.Collections.Specialized.ListDictionary();    
    filterDic.Add("",   "");
    filterDic.Add("等于=",  "equals");
    filterDic.Add("不等于<>", "does not equal");
    filterDic.Add("大于>",  "is greater than");
    filterDic.Add("大于或等于>=","is greater than or equal to");
    filterDic.Add("小于<",  "is less than");
    filterDic.Add("小于或等于<=","is less than or equal to");
    filterDic.Add("空值NULL", "blanks");
    filterDic.Add("非空值Not NULL","non blanks");
    filterDic.Add("包含Like",   "like");
    filterDic.Add("不包含Not Like","not like");
   }
   Control child = GetChildControlByName(ctrl.Controls, "btnCancel");
   if (child != null)
    child.Text = "取消";
   child = GetChildControlByName(ctrl.Controls, "btnOK");
   if (child != null)
    child.Text = "确定";
   child = GetChildControlByName(ctrl.Controls, "rbOr");
   if (child != null)
    child.Text = "或";
   child = GetChildControlByName(ctrl.Controls, "rbAnd");
   if (child != null)
    child.Text = "与";
   child = GetChildControlByName(ctrl.Controls, "label1");
   if (child != null)
    child.Text = "条件:";
   child = GetChildControlByName(ctrl.Controls, "piFirst");
   if (child != null)
    chineseComboEdit(child);
   child = GetChildControlByName(ctrl.Controls, "piSecond");
   if (child != null)
    chineseComboEdit(child);
  }

  private void chineseComboEdit(Control ctrl)
  {
   DevExpress.XtraEditors.ComboBoxEdit newc = new  DevExpress.XtraEditors.ComboBoxEdit();
   newc.Name = ctrl.Name +"clone";    
   ctrl.Parent.Controls.Add(newc);    
   newc.Location = ctrl.Location;
   newc.Size = ctrl.Size;       
   ctrl.Visible = false;
   newc.Tag = ctrl;
   newc.Visible = true;
   DevExpress.XtraEditors.Controls.ComboBoxItemCollection coll = newc.Properties.Items;    
   foreach ( DictionaryEntry de in filterDic )
   {
    coll.Add(de.Key);
   }    
   newc.SelectedIndex = (ctrl as DevExpress.XtraEditors.ComboBoxEdit).SelectedIndex;
   newc.SelectedIndexChanged += new System.EventHandler(SelectedIndexChanged);   
  }

  private void gridView_ShowFilterPopupListBox(object sender, DevExpress.XtraGrid.Views.Grid.FilterPopupListBoxEventArgs e)
  {   
   for(int i = 0; i < e.ComboBox.Items.Count; i++)
   {
    object item = e.ComboBox.Items[i];
    if(item is DevExpress.XtraGrid.Views.Grid.FilterItem && ((DevExpress.XtraGrid.Views.Grid.FilterItem)item).Value is DevExpress.XtraGrid.Views.Grid.FilterItem)
    {
     object itemValue2 = ((DevExpress.XtraGrid.Views.Grid.FilterItem)((DevExpress.XtraGrid.Views.Grid.FilterItem)item).Value).Value;
     
     if(itemValue2 is Int32)
     {
      switch(Convert.ToInt32(itemValue2))
      {
       case 0:
        (e.ComboBox.Items[i] as DevExpress.XtraGrid.Views.Grid.FilterItem).Text = "所有";
        break;
       case 1:
        (e.ComboBox.Items[i] as DevExpress.XtraGrid.Views.Grid.FilterItem).Text = "自定义";
        break;
       case 2:
        (e.ComboBox.Items[i] as DevExpress.XtraGrid.Views.Grid.FilterItem).Text = "空值";   
        break;
       case 3:
        (e.ComboBox.Items[i] as DevExpress.XtraGrid.Views.Grid.FilterItem).Text = "非空值";
        break;
      }
     }
    }
   }
  }

  private void gridView_GridMenuItemClick(object sender, DevExpress.XtraGrid.Views.Grid.GridMenuItemClickEventArgs e)
  {
   //汉化xtraGrid的统计菜单格式      
   if(e.MenuType !=  DevExpress.XtraGrid.Views.Grid.GridMenuType.Summary) return;
   
   String  strFormat = e.SummaryFormat;
   int equInx = strFormat.IndexOf("=");
   if (equInx > 0)
   {
    strFormat = e.DXMenuItem.Caption + strFormat.Substring(equInx);
    e.SummaryFormat = strFormat;
   }
  }
  private void gridView_ShowGridMenu(object sender, DevExpress.XtraGrid.Views.Grid.GridMenuEventArgs e)
  { 

//------------------------------------------------------------------------------------------------------------//

//这段代码是我专用于给xtrGrid加一个点中空地方时显示的菜单,我在这里加入了它的打印功能
  if (e.Menu == null)
   {

/*
    if(e.HitInfo.InRow == false && (sender is DevExpress.XtraGrid.Views.Grid.GridView))
    {
     gCExport = ((DevExpress.XtraGrid.Views.Grid.GridView)sender).GridControl;               
     Point pt = e.Point;
     pt.X = pt.X + gCExport.Location.X;
     pt.Y = pt.Y + gCExport.Location.Y;
     popupMenu1.ShowPopup(gCExport.PointToScreen(pt));     
    }        

*/
    return;
   }

//------------------------------------------------------------------------------------------------------------//
   //汉化xtraGrid的菜单
   System.Collections.Specialized.ListDictionary ld = new System.Collections.Specialized.ListDictionary();
   ld.Add(DevExpress.XtraGrid.Localization.GridStringId.MenuFooterSum, "总和");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuFooterMin,"最小值");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuFooterMax,"最大值");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuFooterCount,"数量");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuFooterAverage,"平均值");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuFooterNone,"无");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnSortAscending,"上升排序");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnSortDescending,"下降排序");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnGroup,"分组");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnUnGroup,"取消分组");     
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnColumnCustomization,"自定义");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnBestFit,"最佳宽度");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnFilter,"过滤");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnClearFilter,"清除过滤");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnBestFitAllColumns,"所有列最佳宽度");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuGroupPanelFullExpand,"全部展开");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuGroupPanelFullCollapse,"全部收缩");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuGroupPanelClearGrouping,"清除分组");
   ld.Add( DevExpress.XtraGrid.Localization.GridStringId.MenuColumnGroupBox,"窗口式分组");

   foreach (DevExpress.Utils.Menu.DXMenuItem  item in e.Menu.Items)
   {    
    Object val = ld[item.Tag];
    if (val != null)    
     item.Caption = val.ToString();    
    
   }
  }
#endregion

发布了30 篇原创文章 · 获赞 2 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/khzide/article/details/578336