数据库的值获取过来转换成Json数组的方法

本文介绍如何解决ExtJS Grid中时间格式显示问题,通过修改字段定义和使用自定义函数实现正确的日期显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.cs文件的主要代码:

public class User_List //这个类是对应是Extjs的Grid的field里面的,field有几项就写几项
{
public int VoteID = 0;
public string VoteName = "";
public DateTime SystemDateTime = DateTime.Parse(DateTime.Today.AddDays(1).ToString("yyyy-MM-dd"));
public DateTime EndTime = DateTime.Parse(DateTime.Today.AddDays(1).ToString("yyyy-MM-dd"));
public string IsStatus = "禁用";
public int SubmitTimes = 0;
}
protected List<User_List> lst = new List<User_List>();//创建数组
protected User_List userlst = new User_List();//定义的类设置对象

for (int i = 0; i < limit; i++)//遍历获取值
{
userlst
= new User_List();//每次循环就新定义对象,不然复制的都是同一组值,每次覆盖原来复制的(这个很重要)
userlst.VoteID = (int)dt.Rows[i]["VoteID"];
userlst.VoteName
= dt.Rows[i]["VoteName"].ToString();
userlst.SystemDateTime
= DateTime.Parse(dt.Rows[i]["SystemDateTime"].ToString());
userlst.EndTime
= DateTime.Parse(dt.Rows[i]["EndTime"].ToString());
userlst.IsStatus
= dt.Rows[i]["IsStatus"].ToString();
userlst.SubmitTimes
= (int)dt.Rows[i]["SubmitTimes"];
lst.Add(userlst);
}
//下面的代码就是将数据库的值转化为Json的主要代码
JavaScriptSerializer java = new JavaScriptSerializer();
StringBuilder sb
= new StringBuilder();
java.Serialize(lst, sb);
string json = sb.ToString();
json
= "{totalPorperty:" + dt1.Rows[0]["totalPorperty"].ToString() + ",root:" + json + "}";
return json;

.js文件中:

cm代码:

cm = new Ext.grid.ColumnModel(//对列的定义,cm是它的简写,作为真个表格的列模式,需要首先创建的
[new Ext.grid.RowNumberer(), Vote_List_sm,
{ header:
"问卷名", width: 250, sortable: true, align: 'center', dataIndex: 'VoteName' },
{ header:
"创建时间", width: 200, sortable: true, align: 'center', dataIndex: 'SystemDateTime' },
{ header:
"结束时间", width: 200, sortable: true, align: 'center', dataIndex: 'EndTime' },
{ header:
"状态", width: 200, sortable: true, align: 'center', dataIndex: 'IsStatus' },
{ header:
"投票次数", width: 200, sortable: true, align: 'center', dataIndex: 'SubmitTimes' }
]);


field代码:

fields = [//设置显示的列名的变量名和变量类型
{name: 'VoteID', type: 'int' },
{ name:
'VoteName', type: 'string' },
{ name:
'SystemDateTime', type: 'datetime' },
{ name:
'EndTime', type: 'datetime' },
{ name:
'IsStatus', type: 'string' },
{ name:
'SubmitTimes', type: 'int' }
];

store代码:

store = new Ext.data.Store
({
//store用来创建一个数据存储对象,是GridPanel必备的属性
proxy: new Ext.data.HttpProxy({ url: Vote_List_url }), //是指获取数据的方式
totalProperty: 'totalPorperty', //表示后台传过来的参数以totalPorperty开始的为数据的总条数
reader: new Ext.data.JsonReader({ totalProperty: "totalPorperty", root: "root", fields: Vote_List_fields }),
remoteSort:
false,
sortInfo: { field:
'VoteID', direction: "DESC"}//设置排序方式,按Userid降序排列,新插的信息显示在最上面
});

在Extjs的Grid中显示的数据的写法和普通的格式一样。但是显示出来后的样子确实这样的:

细心的朋友会发现,datetime的格式的数据显示出来的是乱码一样的东西,这个纠结了很久。查了网上的很多资料,找到一篇比较好的,和大家一起分享下。
  从数据库中取出来的时间类型的数据,Json化以后会出现形如:\/date(125465701)\/ 样子的数据,这样的数据在Grid中无法直接显示成合法的日期形式。这个要在前台处理一下。首先定义个函数:

      //转换为可显示日期
        function Todate(v) {

        if(v == null)

        {

          return null;

        }
            var d = new Date();
            var str = v.toString();
            var str1 = str.replace("/Date(", "");
            var str2 = str1.replace(")/", "");
            var dd = parseInt(str2);
            d.setTime(dd); return d;
      };

  在Store里面只对日期这个选项做如下设置:

     { name: 'TXRQ', type: 'date', dateFormat: 'Y-m-d', convert: Todate }

  在ColumnModel中要做如下设置:

  {  header: '填写日期',
            dataIndex: 'TXRQ',
            renderer: Ext.util.Format.dateRenderer('Y年m月d日'),
            sortable: true,
            width: 95
        }

  这样就可以显示正常显示日期数据了数据。

(引用:Json化后的时间类型数据在Extjs Grid中的显示问题

所以,我们的cm代码要改成:

cm = new Ext.grid.ColumnModel(//对列的定义,cm是它的简写,作为真个表格的列模式,需要首先创建的
[new Ext.grid.RowNumberer(), Vote_List_sm,
{ header:
"问卷名", width: 250, sortable: true, align: 'center', dataIndex: 'VoteName' },
{ header:
"创建时间", width: 200, sortable: true, align: 'center', dataIndex: 'SystemDateTime',renderer: Ext.util.Format.dateRenderer('Y年m月d日') },
{ header:
"结束时间", width: 200, sortable: true, align: 'center', dataIndex: 'EndTime', renderer: Ext.util.Format.dateRenderer('Y年m月d日') },
{ header:
"状态", width: 200, sortable: true, align: 'center', dataIndex: 'IsStatus' },
{ header:
"投票次数", width: 200, sortable: true, align: 'center', dataIndex: 'SubmitTimes' }
]);

field部分代码要改成:

fields = [//设置显示的列名的变量名和变量类型
{name: 'VoteID', type: 'int' },
{ name:
'VoteName', type: 'string' },
{ name:
'SystemDateTime', type: 'datetime', dateFormat: 'Y-m-d', convert: Todate },
{ name:
'EndTime', type: 'datetime', dateFormat: 'Y-m-d', convert: Todate },
{ name:
'IsStatus', type: 'string' },
{ name:
'SubmitTimes', type: 'int' }
];

再就可以改好格式了,成功后的结果:

是不是很简单,挺完美的吧!欢迎大家一起学习一起交流!
                                                          鸣谢:Ya飞

### 将Pandas DataFrame存储至Redis并用PHP读取转换为JSON #### Python端操作:将DataFrame存入Redis 为了实现这一目标,在Python环境中可以利用`pandas`库处理数据,并借助`redis-py`库与Redis数据库交互。下面展示一段代码,用于创建一个简单的DataFrame并通过序列化将其保存到Redis中。 ```python import pandas as pd import json import redis # 创建连接对象 r = redis.Redis(host='localhost', port=6379, db=0) # 构建测试用的数据框 data = {'Column1': ['A', 'B'], 'Column2': [1, 2]} df = pd.DataFrame(data) # 序列化Dataframe为字符串形式以便于存储 serialized_df = df.to_json(orient="records") # 存储到Redis缓存服务器上指定键名下 r.set('my_dataframe_key', serialized_df) ``` 这段脚本首先建立了与本地运行的Redis实例之间的链接[^1];接着构建了一个包含两列的小型表格作为例子;最后通过调用`.to_json()`方法把整个表转成JSON格式串表示再设置给特定名称对应的位置处完成持久化进程。 #### PHP端操作:从Redis获取数据并解析为数组 对于PHP部分,则需安装相应的客户端扩展来访问Redis服务中的信息项。这里给出了一段示范性的源码片段说明怎样提取之前由Python写入的那个记录集并且把它映射成为一个关联式的数组结构: ```php <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 获取来自Redis的数据流 $json_data = $redis->get('my_dataframe_key'); // 解析JSON编码后的字符串成为原生PHP变量 $array_data = json_decode($json_data, true); print_r($array_data); // 输出查看结果 ?> ``` 此程序先初始化一个新的`Redis`类实体并与主机建立通信链路[^2];随后针对先前定义好的key执行GET命令取得其内部所携带的内容体;最终运用内置函数`json_decode()`配合第二个参数设为布尔真使得返回得以呈现为我们期望见到的那种多维索引样式.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值