DevExpress XtraGrid自动空行的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DevExpress XtraGrid自动空行的问题相关的知识,希望对你有一定的参考价值。
DevExpress XtraGrid, 数据表里有两个栏位, A1, A2, 现在我需要把结果显示在GRID里, 并在下面空行处, A1是可编辑的, A2是不可编辑的, 并在输入了A1后新增记录, 并使A2也可以辑辑
参考技术A 你可以根据Grid选中行的状态 设定A2栏位的ReadOnly属性,如果是新增行就将栏位的ReadOnly设为False;如 this.MGridView.Columns[“A2”].ReadOnly = MGridView.GetDataRow().RowState != DataRowState.Added; 参考技术B baidu DevExpress论坛
DevExpress.XtraGrid.GridControl 实现自定义tooltip
DevExpress.XtraGrid.GridControl 控件默认的tooltip显示的每一个单元格的文本值,但是实际工作中会出现各种需求。我这里就有一个列是折扣率显示的值是0-1之间的两位小数,比如说0.55想要显示成五五折。那就需要自己来做一下处理了(效果看下图)
首先。在工具栏中找到ToolTipControllerk控件,并且设置GridControl.ToolTipController=MainGvTool
然后再添加的ToolTipControllerk控件的GetActiveObjectInfo事件中:
private void MainGvTool_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e) { GridHitInfo hitInfo = gvDiscountSchme.CalcHitInfo(e.ControlMousePosition); if (hitInfo.RowHandle < 0 || hitInfo.Column == null||hitInfo.HitTest != GridHitTest.RowCell) { MainGvTool.HideHint(); return; } DataRow row = gvDiscountSchme.GetDataRow(hitInfo.RowHandle);
//如果是DiscountRate列 就显示自定义的tooltip if (hitInfo.Column.FieldName == "DiscountRate") { int rate = (int)(Convert.ToDouble(row["DiscountRate"].ToString()) * 100); e.Info = new ToolTipControlInfo("我也不知道这个参数干嘛用的", GetChineseRate(rate)); } }
private ToolTipControllerShowEventArgs CreateShowArgs(string tooltipText)
{
ToolTipControllerShowEventArgs args = MainGvTool.CreateShowArgs();
args.ToolTip = tooltipText;
return args;
}
e.Info = new ToolTipControlInfo("我也不知道这个参数干嘛用的", GetChineseRate(rate));的第二个参数就是想要显示的文本,如果把GetChineseRate(rate)换成"aaaa" 那么鼠标移动到Grid上面的 DiscountRate列的时候,tooltip就显示的是"aaaa".
这个功能到这里本来算是完成了,但是我这里是想要把0.55显示成五五折,所以还需要做个处理,这里一并说一下我的实现方式
Dictionary<int, string> ChineseRateDic = new Dictionary<int, string>(); public FrmDiscountSchemeList() { InitializeComponent(); ChineseRateDic = GetRateDis(); } /// <summary> /// 根据数字获取汉字 /// </summary> /// <param name="intRate"></param> /// <returns></returns> string GetChineseRate(int intRate) { string chineseRate = string.Empty; chineseRate=ChineseRateDic.Where(item => item.Key == intRate).First().Value; return chineseRate; } /// <summary> /// 获取1-100数字转换汉字的字典集合 /// </summary> /// <param name="intRate"></param> /// <returns></returns> Dictionary<int, string> GetRateDis() { Dictionary<int, string> dic = new Dictionary<int, string>(); for (int i = 1; i <= 100; i++) { if (i < 10) { dic.Add(i, string.Format("零{0}折", Enum.GetName(typeof(NumToChinese), i))); } else if (i >= 10 && i < 100) { string tmp = string.Empty; foreach (char c in i.ToString()) { if (c.ToString() == "0") break; tmp += Enum.GetName(typeof(NumToChinese), Convert.ToInt32(c.ToString())); } dic.Add(i, string.Format("{0}折", tmp)); } else { dic.Add(i,"不打折"); } } return dic; } /// <summary> /// 汉字、数字对比枚举 /// </summary> enum NumToChinese { 零 = 0, 一 = 1, 二 = 2, 三 = 3, 四 = 4, 五 = 5, 六 = 6, 七 = 7, 八 = 8, 九 = 9 }
以上是关于DevExpress XtraGrid自动空行的问题的主要内容,如果未能解决你的问题,请参考以下文章
DevExpress.XtraGrid.GridControl 实现自定义tooltip
如何获取 DevExpress XtraGrid 的选定行值?
如何在 DevExpress XtraGrid 中获得单击的单元格列
如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。