ASPxGridView动态创建表格列编辑模板

时间:2021-03-29 19:24:52

在项目中用到了DevExpress的ASPxGridview控件,每每去配置它的时候,总感觉很是啰嗦,于是想到了用代码自动配置。

于是有了这样的代码:

             foreach (ZiyuWeb.Entity.Sys_UIConfig item in sConfigs)
                {
                    switch (item.ControlName)
                    {
                        case "ASPxDropDown_ASPxCheckListBox":
                            {
                                DevExpress.Web.ASPxGridView.GridViewDataDropDownEditColumn col = new GridViewDataDropDownEditColumn();//创建一个表格列;
                                col.FieldName = item.FieldName;//表格列绑定的数据源字段名称
                                col.Caption = item.FieldDescribe;//字段显示标题
                                col.Name = "col_" + item.FieldName;//列名称
                                col.VisibleIndex = item.OrderByID;//显示顺序
                                col.Width = item.Width;//显示宽度
                                col.Visible = item.UserIsVisible;//是否可见
                                col.ReadOnly = item.UserReadOnly;//是否只读
                               // col.EditItemTemplate = new ZiyuWeb.ASPxCheckListBox_DropDownTemplate("", item.QueryStr, col.Name);//创建该字段的编辑模板,如果是标准的DevExpress.Web.ASPxEditor则无需创建编辑模板了。但若是DropDown或者自己写的控件,就必须自行创建了。
                                mygridview.Columns.Add(col);//添加到View;

                                break;
                            }
                      ……
                    }
                }

  有了上面代码创建的表格,则ASPxGridview控件只需要设置一下配置文件名称和数据源,便可以以一行代码来完美展现了。

           ZiyuWeb.WebFunc.ZiyuDevHelper.configGridView(ASPxGridView1, "Sys_UIConfig", true, null);

 

创建EditItemTemplate。

    class MyTemplate_AspxCheckBoxList : ITemplate
    {
        int _iwidth = 80;
        public int Iwidth
        {
            get { return _iwidth; }
            set { _iwidth = value; }
        }
        ZiyuWeb.Entity.Sys_UIConfig uiconfig;
        public MyTemplate_AspxCheckBoxList(ZiyuWeb.Entity.Sys_UIConfig myuiconfig)
        {
            uiconfig = myuiconfig;
            Iwidth = uiconfig.Width;

        }
        public void InstantiateIn(Control container)
        {
            DevExpress.Web.ASPxEditors.ASPxCheckBoxList alistbox = new ASPxCheckBoxList();
            alistbox.TextField = uiconfig.FieldName;
            alistbox.ValueField = uiconfig.FieldName;
            if (uiconfig.QueryStr != null)
            {
                if (uiconfig.QueryStr.Length > 0)
                {
                    if (uiconfig.QueryStr.IndexOf("select") >= 0)
                    {
                        System.Collections.ArrayList alist = MyHelper4Web.MyStringHelper.getTableNamefromSql(uiconfig.QueryStr);
                        XCode.DataAccessLayer.DAL mydal = XCode.DataAccessLayer.DAL.Create("common");
                        System.Data.DataTable dt = mydal.Select(uiconfig.QueryStr, alist[0].ToString()).Tables[0];
                        if (dt.Columns.Count == 1)
                        {
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                alistbox.Items.Add(dt.Rows[i][0].ToString());
                            }
                        }
                    }
                    else
                    {
                        System.Collections.ArrayList alist =
                        MyHelper4Web.MyConvertHelper.ConvertStringToArrayList(uiconfig.QueryStr, ";");
                        for (int i = 0; i < alist.Count; i++)
                        {
                            alistbox.Items.Add(alist[i].ToString());
                        }
                    }
                }
            }
            alistbox.ID = "myCon_" + uiconfig.FieldName;
            alistbox.ClientInstanceName = "myCon_" + uiconfig.FieldName;
            alistbox.RepeatColumns = 3;
            alistbox.TextWrap = false;
            alistbox.RepeatDirection = RepeatDirection.Horizontal;
            alistbox.RepeatLayout = RepeatLayout.Flow;

            string rowValue = (container as GridViewEditItemTemplateContainer).Text;
            string[] rowValueItems = rowValue.Split(';');
            List<string> rowValueItemsAsList = new List<string>();
            rowValueItemsAsList.AddRange(rowValueItems);
            foreach (ListEditItem item in alistbox.Items)
                if (rowValueItemsAsList.Contains(item.Value.ToString()))
                    item.Selected = true;
            container.Controls.Add(alistbox);
        }
    }