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