CYQ.Data+EasyUI开发:几个相关的问题CheckBox、Tree、TreeGrid

上一节:“爱说说”技术原理:与TXT交互及MDataTable对Json的功能扩展 中,

前言:

话说到新的公司已经呆了三个星期了,从上班的第二天开始就一直在写项目文档和给开发人员培训,以至于我的QQ签名从”我不是来搞培训的“到最后直接换成”我是来搞培训的“。

虽然挂名开发经理,但下面目前就2人,手下的人虽然混过了2年工龄,但连进程,线程,泛型,面向对象等基础都摸不着头脑的小女孩,要指望她们写代码,只好时不时的抽空给讲基础了。

话说下周的下周还会从Boss的母校里招来二十几个学生过来实习,要我分解项目,写出详细的文档,然后简单培训下学生,让学生看着文档就能干活,明白了我是来搞培训的。

好了,玩笑过后,下面讲讲当前用EasyUI遇到的几点问题:

 

1:兼容IE8问题

话说当前最新版本easyUI
1.3.4不支持ie8,听说是jq2.0不支持的原因,只好降级使用到easyui
1.3.2,对应的jq1.8版本。

我们解决了TXT数据存储和Json的交互问题,本节,看一下后台的业务逻辑:

2:Form表单的CheckBox问题

easyUI有个Form表单的自动赋值:$(“#id”).form(‘load’,json);

一开始用这样的代码:

using (MAction action = new MAction(TableNames.Roles))
{
   if (action.Fill(ID))
   {
     return  action.Data.ToJson();
   }
}

结果发现返回的json怎么也给checkbox赋不了值,网上也没对应的资料好寻,最后调一下js,看到普通的input赋值,想到了on。

于是把返回的true替换成on,[action.Data.ToJson().Replace(“True”, “on”)] 就可以了。

 

 

3:DataGrid里的CheckBox问题:

对于表格,需要将某些bool型的字段格式化成checkbox显示,找到了半天,发现只有用formatter格式化出来自己的样式:

 var formatCheckBox = function (value, row, index) {
        if (value == “1” || value == “True”) {
            return “<input type=’checkbox’ checked=’checked’ disabled=’disabled’ />”;
        } else {
            return “<input type=’checkbox’ disabled=’disabled’  />”;
        }
    }

然后界面指定:

 <th  data-options=”field:’IsEnabled’,formatter:formatCheckBox” > 是否启用</th>

悲催的是,格式出来的控件,没有对应的API可以获取相关的值,目前的处理方法只好通过增加点击事件,来处理后续状态改变后值的提交。

爱说说: [当前版本已增加了音乐和表情]

4:Tree 的绑定(MDataTable表格直接转Json,不用多次查询数据库):

研究了一下Tree的绑定的json格式,然后写了一个递归函数,直接把一个MDataTable转成树型的Json。

 // string id,string parentID,string text,string state,string url
        /// <summary>
        /// 将表格转成Tree对应的Json,对应的字段为(id,parentiID,text,state,url)
        /// </summary>
        /// <param name=”dt”></param>
        /// <param name=”parentID”>为0或为空</param>
        /// <returns></returns>
        public static string ToTreeJson(MDataTable dt, string parentID)
        {
            List<MDataRow> firstDt = dt.FindAll(“ParentID='” + parentID + “‘”);//第一级菜单
            if (firstDt.Count > 0)
            {
                MDataRow row = null;
                JsonHelper json = new JsonHelper();
                string id, text, url;
                for (int i = 0; i < firstDt.Count; i++)
                {
                    row = firstDt[i];
                    id = row.Get<string>(“id”);
                    text = row.Get<string>(“text”);
                    json.Add(“id”, id);
                    json.Add(“text”, text);

                    url = row.Get<string>(“url”);
                    if (!string.IsNullOrEmpty(url))
                    {
                        json.Add(“attributes”, “{“url”:”” + url + “”}”, true);
                    }
                    string children = ToTreeJson(dt, id);
                    if (!string.IsNullOrEmpty(children))
                    {
                        if (row.Get<bool>(“state”))
                        {
                            json.Add(“state”, “closed”);
                        }
                        json.Add(“children”, children, true);
                    }
                    json.AddBr();
                }
                return json.ToString(true);
            }
            return string.Empty;

对于传进来的MDataTable,需要修改列名和对应的字段对上,然后保留一个通用的上级字段(ParentID)就可以了,最终就出来这种格式了。

威尼斯官方网站登录 1 

 

5:TreeGrid的绑定:

在功能权限这一块,需要用到TreeGrid这种格式,最终发现决定上下级的json,是叫“_parentId”,还有该字段不能指定一个不存在的上级,不然不显示。

对于这个,我也写了一个简单的转换函数:

 /// <summary>
        /// 将表格转成GreeGrid对应的Json.
        /// </summary>
        /// <param name=”dt”></param>
        /// <returns></returns>
        public static string ToTreeGridJson(MDataTable dt)
        {
            int index = dt.Columns.GetIndex(“ParentID”);
            if (index > -1)
            {
                dt.Columns[index].ColumnName = “_parentId”;
                int value = 0;
                foreach (MDataRow row in dt.Rows)
                {
                    value = row.Get<int>(index);
                    if (value == 0 || row.Get<int>(“id”) == value)//GreeGrid不存在的父ID不能出现
                    {
                        row[index].Value = DBNull.Value;
                    }
                }
            }
            return dt.ToJson(true, false);
        }

树形的效果就出来了:

威尼斯官方网站登录 2 

目前项目刚开始,只遇到并处理了这几个基本的问题,后续若有问题待定。 

先看Page_Load事件:

总结:

话说男女搭配,干活不累,是有那么点道理。

 

      public override void Page_Load()
        {
            if (day == 0)//首次初始化
            {
                day = Now.Day;
            }
            switch (GetInt(“t”))
            {
                case 1://添加信息
                    if (PostBufferOK(0.05))//同一IP3秒提交一次
                    {
                        outHtml = Add(Get(“n”), Get(“v”),
GetInt(“pid”));
                    }
                    break;
                case 2://删除信息
                    outHtml = Del(GetInt(“v”));
                    break;
                case 3://获取更多信息
                    outHtml = Select(GetInt(“v”), GetInt(“s”));
                    break;
                case 4://获取最新消息
                    outHtml = Select(GetInt(“v”));
                    break;
            }
        }

说明:通过分支,调用了不同的方法,最后通过outHtml输出Json到客户端。

 

下面进行详细的分支解说:

 

威尼斯官方网站登录,一:数据提交:[用户发布消息或回应消息时提交的数据]

 

参数约定:

类型参数:t=1

文本参数:v=”这是提交的内容”;

昵称参数:n=”路过秋天”

回应参数:pid=-1,[回应时带回应消息的ID,非回应则为-1]

 

逻辑代码:

        /// <summary>
        /// 发布消息
        /// </summary>
        public string Add(string nickName, string body, int pid)
        {
            MDataRow row = Table.NewRow();
            int maxID = MaxID;
            row.Set(0, maxID);
            row.Set(“ParentID”, pid);
            row.Set(“UserID”, IP.Replace(“.”,string.Empty));
            row.Set(“NickName”, nickName);
            row.Set(“Body”, body);
            row.Set(“CreatedOn”, Now);
            Table.Rows.Add(row);//内存表加一行
            AppendText(row.ToJson());//写入TXT文本一行
            return maxID.ToString();
        }

 

二:数据删除:[用户删除指定ID数据]

 

参数约定:

类型参数:t=2

行ID参数:v=88 [被删除行的ID]

 

逻辑代码

        /// <summary>
        /// 删除消息
        /// </summary>
        public string Del(int id)
        {
            MDataRow row = Table.FindRow(“ID”, Op.Equal, id);
            if (row != null)
            {
                RemoveText(row.ToJson());//删除文本一行
                Table.Rows.Remove(row);//删除内存表一行
            }
            return id.ToString();
        }

 

三:数据加载[首次加载及点击“浏览更多时”加载]

 

参数约定:

类型参数:t=3

值ID参数:v=id
[最小ID,加载时都是取的最新的数据,每次都从后面取,所以比较最小ID]

分页参数:s=20[每次20条消息]

 

逻辑代码

        public string Select(int minID, int pageSize)
        {
            Op op = minID < 1 ? Op.None :
Op.Small;//Small就是”<“号了
            return Table.Select(1, pageSize, true, “ID”, op,
minID).ToJson();
        }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章