FineUI 官方论坛

标题: 【已确认】V6中Grid绑定数据源后的FState验证出错 [打印本页]

作者: Fire    时间: 2016-10-24 18:12
标题: 【已确认】V6中Grid绑定数据源后的FState验证出错
弹出框中两个Grid,数据源均来自数据库查询的dataset。第一个Grid的OnRowClick事件,在后台为第二个加载数据。第二个grid的OnRowClick事件,在后台处理数据,关闭当前windows,返回数据。 当第二个Grid的数据源是直接从数据库中查出来的DataSet时,点击页面任何操作往后台发送数据时,报上面的FState校验错误。而重新new一个DataTable,再把数据一行行复制过来,绑定到Grid2时,点击页面任何操作往后台发送数据时就不报错了。如图:
[attach]9339[/attach]
[attach]9340[/attach]



代码:
protected void GridBrand_RowClick(object sender, FineUI.GridRowClickEventArgs e)
        {
            object[] keys = GridBrand.DataKeys[e.RowIndex];
            BLL.Car.CarSerial bll = new BLL.Car.CarSerial();
            DataSet ds = bll.SerialList(keys[0].ToString());

            ////直接绑定会FState失效
            //GridSerial.DataSource = ds.Tables[0];
            //GridSerial.DataBind();

            ////Copy一个也不行
            //DataTable newTab2 = ds.Tables[0].Copy();
            //GridSerial.DataSource = newTab2;
            //GridSerial.DataBind();

            ////new一个才好用
            DataTable newTab = new DataTable();
            newTab.Columns.Add("Id");
            newTab.Columns.Add("SerialName");
            newTab.Columns.Add("minPrice");

            foreach(DataRow dr in ds.Tables[0].Rows)
            {
                DataRow newRow = newTab.NewRow();
                newRow["Id"] = dr["Id"];
                newRow["SerialName"] = dr["SerialName"];
                newRow["minPrice"] = dr["minPrice"];
                newTab.Rows.Add(newRow);
            }
            GridSerial.DataSource = newTab;
            GridSerial.DataBind();

        }



grid:
<fanel ID="anel1" runat="server" ShowBorder="false"  EnableCollapse="false"
                    Layout="HBox" BoxConfigAlign="Stretch" BoxConfigPosition="Start" BoxFlex="1"
                    BoxConfigChildMargin="0 0 0 0" BodyPadding="0" ShowHeader="false"
                    Title="">
                    <Items>
                        <fanel ID="anel3" Title="面板1" BoxFlex="1" runat="server" Layout="Fit"
                            BodyPadding="0" ShowBorder="false" ShowHeader="false" Margin="0 5 0 0">
                            <Items>
                                <f:Grid ID="GridBrand" Title="品牌"  EnableCollapse="false" ShowBorder="true" ShowHeader="true"
                                        runat="server" EnableCheckBoxSelect="false" DataKeyNames="Id"
                                        EnableMultiSelect="false" EnableRowClickEvent="true">
                                        <Columns>
                                            <f:BoundField ExpandUnusedSpace="true" DataField="brand" DataFormatString="{0}" HeaderText="品牌" TextAlign="Center" />
                                        </Columns>
                                    </f:Grid>
                            </Items>
                        </fanel>
                        <fanel ID="anel4" Title="面板2" BoxFlex="2" Layout="Fit"
                            runat="server" BodyPadding="0" ShowBorder="false" ShowHeader="false">
                            <Items>
                                <f:Grid ID="GridSerial" Title="车系"  EnableCollapse="false" ShowBorder="true" ShowHeader="true"
                                        runat="server" EnableCheckBoxSelect="false" DataKeyNames="Id,SerialName,minPrice"
                                        EnableMultiSelect="false" EnableRowClickEvent="true">
                                        <Columns>
                                            <f:BoundField ExpandUnusedSpace="true" DataField="Comany" DataFormatString="{0}" HeaderText="厂家" TextAlign="Center" />
                                            <f:BoundField ExpandUnusedSpace="true" DataField="SerialName" DataFormatString="{0}" HeaderText="车系" TextAlign="Center" />
                                            <f:BoundField Width="100px" DataField="minPrice" DataFormatString="{0:f2}" HeaderText="最低价(万元)" TextAlign="Center" />
                                        </Columns>
                                    </f:Grid>
                            </Items>
                        </fanel>
                    </Items>
                </fanel>


作者: bdd    时间: 2016-10-25 09:15
这个目前可以解决的方案是将PageManager 中的EnableFStateValidation=false能解决,但是估计还要等三石来处理
作者: Fire    时间: 2016-10-25 09:38
bdd 发表于 2016-10-25 09:15
这个目前可以解决的方案是将PageManager 中的EnableFStateValidation=false能解决,但是估计还要等三石来处 ...

嗯,如果需要验证的话,就只能是吧数据再new一个datatable重新导一遍了。
作者: sanshi    时间: 2016-10-25 09:51
请基于空项目重现问题,并上传。这样没法调试解决
作者: Fire    时间: 2016-10-25 10:34
sanshi ,项目上传到云盘了,链接在bug地址那儿。空项目太大,我附件传不上去。
下载地址:http://pan.baidu.com/s/1kVx021L
作者: god33    时间: 2016-10-26 11:21
[attach]9342[/attach]
怎么回事,我也有这个问题

作者: sanshi    时间: 2016-10-31 22:27
Fire 发表于 2016-10-25 10:34
sanshi ,项目上传到云盘了,链接在bug地址那儿。空项目太大,我附件传不上去。
下载地址:http://pan.baid ...

多谢。有可重现的项目,就好解决问题了。

这是一个BUG,下个版本会修正(FineUI v6.0.1):
-----
+修正DataKeyNames值是小数(比如9.80),则页面回发时会出现F_STATE验证出错的问题(Fire-8910)。
                -JavaScript会自动忽略小数的最后零(比如2.0,9.80),导致服务器生成的数据和回发的数据不一致。




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4