FineUI 官方论坛
标题:
DataGrid中,使用DropDownList多选数据,保存时出错。
[打印本页]
作者:
presun
时间:
2015-8-10 18:00
标题:
DataGrid中,使用DropDownList多选数据,保存时出错。
在DataGrid中,其中的一列是要从多个值中选取(可以多选),此列使用RenderField,Editor是一个DropDownList,DropDownList的数据源是List<string>类型,在初始显示时正确,当鼠标点击,进入编辑状态时,DropDownList没有根据单元格的值自动选中,再重新选择项,保存数据,报错:
Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken。
石上能帮我看看什么问题不?
作者:
presun
时间:
2015-8-10 18:03
堆栈信息:
[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
作者:
presun
时间:
2015-8-12 08:33
问题已找到,在Grid的LoadPostData方法中,如果数据是多选的,其类型是JArray,无法直接转换成JValue,所以,要先JArray中的值拼成一个,在原来的程序中,没有处理JArray的情况,二是将值直接转换,导致的此问题。修改代码如下3731行开始:
Dictionary<string, object> rowModifiedDic = new Dictionary<string, object>();
JObject rowModifiedData = modifiedItem[2].ToObject<JObject>();
object cellValue = null;
foreach (JProperty propertyObj in rowModifiedData.Properties())
{
string columnID = propertyObj.Name;
//==处理可以多选的情况
JArray jarr = rowModifiedData[columnID] as JArray;
if (jarr != null)
{
string value="";
foreach (var item in jarr)
{
value += "," + item;
}
if(value.Length >1)
value = value.Substring(1);
cellValue = value;
}
else
cellValue = rowModifiedData.Value<JValue>(columnID).Value;
//===处理多选结束
复制代码
作者:
presun
时间:
2015-8-12 08:34
不知道如何获取是否是多选的属性(如果可以的话,效率应该会好些),所以,直接对类型进行转换,如果不成功,则说明是单选。
作者:
stevezozo
时间:
2015-8-12 15:43
受教了
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4