FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 3709|回复: 4
打印 上一主题 下一主题

DataGrid中,使用DropDownList多选数据,保存时出错。

[复制链接]
跳转到指定楼层
楼主
发表于 2015-8-10 18:00:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在DataGrid中,其中的一列是要从多个值中选取(可以多选),此列使用RenderField,Editor是一个DropDownList,DropDownList的数据源是List<string>类型,在初始显示时正确,当鼠标点击,进入编辑状态时,DropDownList没有根据单元格的值自动选中,再重新选择项,保存数据,报错:Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken。


石上能帮我看看什么问题不?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
 楼主| 发表于 2015-8-10 18:03:37 | 只看该作者
堆栈信息:
[InvalidCastException: Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken.]
   Newtonsoft.Json.Linq.Extensions.Convert(T token) +621
   Newtonsoft.Json.Linq.JToken.Value(Object key) +133
   FineUI.Grid.LoadPostData(String postDataKey, NameValueCollection postCollection) +1824
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +734
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1960
板凳
 楼主| 发表于 2015-8-12 08:33:05 | 只看该作者
问题已找到,在Grid的LoadPostData方法中,如果数据是多选的,其类型是JArray,无法直接转换成JValue,所以,要先JArray中的值拼成一个,在原来的程序中,没有处理JArray的情况,二是将值直接转换,导致的此问题。修改代码如下3731行开始:
  1. Dictionary<string, object> rowModifiedDic = new Dictionary<string, object>();
  2.                         JObject rowModifiedData = modifiedItem[2].ToObject<JObject>();
  3.                         object cellValue = null;
  4.                         foreach (JProperty propertyObj in rowModifiedData.Properties())
  5.                         {
  6.                             string columnID = propertyObj.Name;
  7.                             //==处理可以多选的情况
  8.                             JArray jarr = rowModifiedData[columnID] as JArray;
  9.                             if (jarr != null)
  10.                             {
  11.                                 string value="";
  12.                                 foreach (var item in jarr)
  13.                                 {
  14.                                     value += "," + item;
  15.                                 }
  16.                                 if(value.Length >1)
  17.                                     value = value.Substring(1);
  18.                                 cellValue = value;
  19.                             }
  20.                             else
  21.                                 cellValue = rowModifiedData.Value<JValue>(columnID).Value;
  22.                             //===处理多选结束
复制代码
地板
 楼主| 发表于 2015-8-12 08:34:32 | 只看该作者
不知道如何获取是否是多选的属性(如果可以的话,效率应该会好些),所以,直接对类型进行转换,如果不成功,则说明是单选。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-28 05:51 , Processed in 0.046262 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表