关于按照不同的标准设定每行表格中内嵌控件的方法

今天小芸在做表格控件的时候遇到一个问题,即根据不同的情况设定不同行的RspostoryItemEdit控件的属性,她用的是Button,于是我开始研究怎么做,大概想到了两种思路,一种是在绑定完数据源后,遍历每一行,设定RspostoryItemEdit控件的属性,先获取到单元格,然后将单元格转化为控件类型,但实际操作中发现,利用   GridView.GetRowCellValue  方法发现获取到的仅仅是该单元格的值,非为控件,于是这种思路放弃了。

第二种思路是,在绑定数据源的时候,也就是RspostoryItem生成或者在其绘制的时候修改其属性,第二种成功了,现代码如下:

 

      1.根据不同列名设置所有的RepositoryItem 情况;

 在表格的CustomRowCellEdit事件中做如下处理,就可以根据girdview中的每行状态不同,分别设置每行repositoryitembuttonedit的属性
  private void grdvMain_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
         {
          RepositoryItemButtonEdit button = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
                        button.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
                        button.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
                        button.Click += new EventHandler(button_Click);
                        e.RepositoryItem = button;   //这一句位置有待商榷,这样写整个表格都不会出来

                        switch (e.Column.FieldName)   //此处为根据列的不同名称设定不同的RepositoryItem 情况,
                        {
                            case "A":
                                  button.Buttons[0].Caption = "A"
                                break;
                            case "B":
                                  button.Buttons[0].Caption = "B"
                                break;
                            case "C":
                                 button.Buttons[0].Caption = "C";
                                break;
                            default:
                                break;
                        }
}
 
       2.根据每行记录设置所有的RepositoryItem 情况;
private void grdvMain_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
         {  
      if(e.Column==控件在的列)
      {
          RepositoryItemButtonEdit button = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
                        button.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
                        button.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
                        button.Click += new EventHandler(button_Click);
                        e.RepositoryItem = button;   //这一句位置有待商榷,这样写整个表格都不会出来
      }
                        switch (e.CellValue)   //此处为根据列的每行值设定不同的RepositoryItem 情况,
                        {
                            case "A":
                                  button.Buttons[0].Caption = "A"
                                break;
                            case "B":
                                  button.Buttons[0].Caption = "B"
                                break;
                            case "C":
                                 button.Buttons[0].Caption = "C";
                                break;
                            default:
                                break;
                        }
}

       

 

   需要注意的有以下几点

      1.RepositoryItemButtonEdit .Buttons属性是讲RepositoryItemButtonEdit 中有几个Button,是一个枚举类型,并且和Grid的行数无关,仅仅是设计器中的东西,有1个,单元格中有一个按钮,有两个,单元格中就有两个按钮;

      2.此种方法不仅适用于GridView,也适用于LayoutView视图;

posted @ 2016-11-17 11:25  爱弹琴的小柯基  阅读(531)  评论(0编辑  收藏  举报