FineUI 官方论坛

标题: 【已解决】Web.config配置不对导致的表格模板列问题 [打印本页]

作者: 西门吹雪    时间: 2013-3-11 03:38
标题: 【已解决】Web.config配置不对导致的表格模板列问题
   
界面如图:                  
[attach]1845[/attach]   [attach]1852[/attach]此图片我用全选复选框时模板列中只能选择第一行的数据.

其中浏览列后的是权限列表,可显示的只有最后一行的权限"新增,编辑,删除",事实上其他模块的权限是不同的.
我后台RowDataBound事件的代码如下:
        protected override void Gr_RowDataBound(object sender, GridRowEventArgs e)
        {
            System.Web.UI.WebControls.CheckBoxList ddlOthers = (System.Web.UI.WebControls.CheckBoxList)gr_Base.Rows[e.RowIndex].FindControl("ddlOthers");

            RoleModulePower row = e.DataItem as RoleModulePower;
            string moduleName = row.ModuleName;

            List<string> otherPowerNames = ModulePowerTypeHelper.GetModuleOtherPowerTypeDic(moduleName);

            foreach (string powerName in otherPowerNames)
            {
                // powerName = "ChangePassword" moduleName = "CoreUser"
                System.Web.UI.WebControls.ListItem item = new System.Web.UI.WebControls.ListItem();
                item.Value = powerName;
                item.Text = ModulePowerTypeHelper.GetTitle(moduleName, powerName);

                item.Selected = row.OtherPowers[powerName].Value<bool>();

                ddlOthers.Items.Add(item);
            }
        }

前台:
                            <x:Grid ID="gr_Base" ShowHeader="False" runat="server"
                                EnableRowNumber="true" AllowSorting="true" PageSize="20" ShowBorder="true" AllowPaging="true"
                                EnableTextSelection="true" IsDatabasePaging="true"
                              
                                DataKeyNames="Id,ModuleName" AutoScroll="true" EnableRowDoubleClick="true">
                                <Columns>
                                    <x:BoundField HeaderText="标题" SortField="Title" DataField="Title" Width="120px" />
                                    <x:BoundField HeaderText="名称" SortField="ModuleName" DataField="ModuleName" Width="120px" />
                                    <x:CheckBoxField TextAlign="Center" ColumnID="CanRead" DataField="CanRead" HeaderText="浏览"
                                       RenderAsStaticField="false" Width="50px" />
                                    <x:TemplateField ExpandUnusedSpace="true" ColumnID="Others" HeaderText="其他权限">
                                        <ItemTemplate>
                                            <asp:CheckBoxList ID="ddlOthers" CssClass="others" RepeatLayout="Flow" RepeatDirection="Horizontal"
                                                runat="server">
                                            </asp:CheckBoxList>
                                        </ItemTemplate>
                                    </x:TemplateField>
                                </Columns>
                            </x:Grid>


作者: 西门吹雪    时间: 2013-3-11 07:21
哪位老大帮我看看这个问题吧!
作者: 西门吹雪    时间: 2013-3-12 09:37
西门吹雪 发表于 2013-3-11 07:21
哪位老大帮我看看这个问题吧!

老大忙看看吧,谢谢了
作者: appletreegd    时间: 2013-3-12 09:51
其实你的问题是什么??你的描述不太清楚啊。。。
作者: 西门吹雪    时间: 2013-3-12 10:43
appletreegd 发表于 2013-3-12 09:51
其实你的问题是什么??你的描述不太清楚啊。。。

首先谢谢老大.问题是这样的:

我用的是三石老大的APPBOX中的权限管理.只是把Subsonic改成了Nhibernate.
界面中是权限分配的页面.其中权限列表一列是我把菜单对应的功能权限列了出来(仅为了方便对照找问题,实际项目中不会列出).比如第一行对应菜单模块管理,其中的权限有"New","Edit","Delete",默认权限都是False.
其他权限一列是模板列,与三石老大APPBOX中的是一样的.模板列用的是CheckBoxList控件来显示."新增","编辑","删除"分别对应"权限列表"列中的"New","Edit","Delete".
现在的问题是这样,我在Grid的RowDataBound事件来绑定,可每一行该模板列显示的数据都是最后一行的对应的权限列表的数据,如"权限列表"数据为"{}"的列在模板列"其他权限"中对应的数据应该为空,"权限列表"数据为"{"Edit":false}的列在模板列"其他权限"中对应的数据应该只有"编辑"选择框,其他没有
作者: 西门吹雪    时间: 2013-3-12 10:44
appletreegd 发表于 2013-3-12 09:51
其实你的问题是什么??你的描述不太清楚啊。。。

另外我在后台跟踪到的数据又是正确的,绑定出来就出问题了
作者: appletreegd    时间: 2013-3-12 11:27
本帖最后由 appletreegd 于 2013-3-12 11:28 编辑
西门吹雪 发表于 2013-3-12 10:44
另外我在后台跟踪到的数据又是正确的,绑定出来就出问题了

我用把你的代码改了一下在APPBOX上测试,没问题啊。
<x:Grid ID="gr_Base" ShowHeader="False" BoxFlex="1" runat="server" EnableRowNumber="true" AllowSorting="true"
                        PageSize="20" ShowBorder="true" AllowPaging="true" EnableTextSelection="true"
                        IsDatabasePaging="true" DataKeyNames="ModuleId,ModuleName" AutoScroll="true"
                        EnableRowDoubleClick="true" OnRowDataBound="Gr_RowDataBound">

  1. protected void Gr_RowDataBound(object sender, GridRowEventArgs e)
  2.         {...}
复制代码

因为我是在那个页面绑定的,你看效果:


[attach]1851[/attach]


作者: 西门吹雪    时间: 2013-3-12 16:05
appletreegd 发表于 2013-3-12 11:27
我用把你的代码改了一下在APPBOX上测试,没问题啊。

我用全选复选框按钮时模板列中的复选框只能选择第一行的数据.其他行没反应.效果见新加的图片.
作者: appletreegd    时间: 2013-3-12 16:51
就是个循环遍历的过程。参照APPBOX上的吧,估计是代码哪里有问题。
作者: 西门吹雪    时间: 2013-3-13 02:45
appletreegd 发表于 2013-3-12 16:51
就是个循环遍历的过程。参照APPBOX上的吧,估计是代码哪里有问题。

代码应该没问题,我就用一个Label来显示数据,出来的结果也全部是最后一行的数据.
作者: sanshi    时间: 2013-3-13 03:02
西门吹雪 发表于 2013-3-13 02:45
代码应该没问题,我就用一个Label来显示数据,出来的结果也全部是最后一行的数据. ...

写个别人能直接运行的例子,调试下就行了,这样说不明白....
作者: 西门吹雪    时间: 2013-3-13 03:40
sanshi 发表于 2013-3-13 03:02
写个别人能直接运行的例子,调试下就行了,这样说不明白....

写例子会比较麻烦.我现在截两张图:
图1:[attach]1854[/attach]

图2:[attach]1853[/attach]

其中图1和图2最后一列是模板列(其他权限),我是要在RowDataBound事件中绑定编码列的数据
图1是按编码升序排序,注意模板列显示的是2111(数据是编码列的最后一行的数据)
图2是按编码降序排序,模板列显示的是1001(数据也是编码列的最后一行的数据)

我前台代码是(红字部分是模板列):
<x:Grid ID="gr_Main" ShowHeader="False" runat="server" EnableCheckBoxSelect="true"
                                EnableRowNumber="true" AllowSorting="true" PageSize="20" ShowBorder="true" AllowPaging="true"
                                EnableTextSelection="true" IsDatabasePaging="true"
                              
                                DataKeyNames="Id" AutoScroll="true" EnableRowDoubleClick="true">
                                <Columns>
                                    <x:BoundField HeaderText="编码" SortField="CodeD" DataSimulateTreeLevelField="Level" DataField="CodeD" />
                                    <x:BoundField HeaderText="名称" SortField="Name" DataField="Name" ExpandUnusedSpace="true"/>
                                    <x:BoundField HeaderText="科目类别" SortField="SubjectCategoryD" DataField="Url" />
                                    <x:BoundField HeaderText="记帐方向" SortField="DirectD" DataField="Title" />
                                    <x:TemplateField ExpandUnusedSpace="true" ColumnID="Others" HeaderText="其他权限">
                                        <ItemTemplate>
                                            <aspabel ID="Label1" runat="server" Text=""></aspabel>
                                        </ItemTemplate>
                                    </x:TemplateField>

                                    <x:BoundField Width="130px" HeaderText="添加时间" SortField="CreatedOn" DataField="CreatedOn" />
                                    <x:BoundField Width="130px" HeaderText="更新时间" SortField="UpdatedOn" DataField="UpdatedOn" />
                                    <x:CheckBoxField SortField="Enabled" Width="50px" RenderAsStaticField="false" AutoPostBack="true"
                                        CommandName="cb_StatusD" DataField="Enabled" HeaderText="状态" />
                                    <xinkButtonField ConfirmText="确定要删除此记录及其相关所有记录么?" ConfirmTarget="Top" ColumnID="lbf_Delete"
                                        HeaderText="&nbsp;" Width="50px" CommandName="Delete" Text="删除" />
                                </Columns>
                            </x:Grid>

后台对应事件为(红字是重写事件):

        protected override void Gr_RowDataBound(object sender, GridRowEventArgs e)
        {
            AspNet.Label lbl = (AspNet.Label)gr_Base.Rows[e.RowIndex].FindControl("Label1");
            //AspNet.CheckBoxList ddlOthers = (AspNet.CheckBoxList)gr_Base.Rows[e.RowIndex].FindControl("ddlOthers");

            FeatureD row = e.DataItem as FeatureD ;
            string Code = row.Code;

            lbl.Text = Code;
        }


作者: 西门吹雪    时间: 2013-3-13 03:41
sanshi 发表于 2013-3-13 03:02
写个别人能直接运行的例子,调试下就行了,这样说不明白....

我跟踪到的数据是正确的,可绑定显示出来就这样了.
作者: 西门吹雪    时间: 2013-3-13 04:32
sanshi 发表于 2013-3-13 03:02
写个别人能直接运行的例子,调试下就行了,这样说不明白....

老大,我用的是4.0,用3.5就没问题

作者: 西门吹雪    时间: 2013-3-13 05:03
sanshi 发表于 2013-3-13 03:02
写个别人能直接运行的例子,调试下就行了,这样说不明白....

我在配置文件节中加:<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
现在已经好了
作者: sanshi    时间: 2013-3-13 06:26
西门吹雪 发表于 2013-3-13 05:03
我在配置文件节中加:
现在已经好了

对,这个是常见问题,参看:http://fineui.com/bbs/forum.php? ... &extra=page%3D1
作者: luokaijin    时间: 2013-6-3 17:55
把<pages >改为:
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">




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