FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

搜索
查看: 4755|回复: 8
打印 上一主题 下一主题

强列建议将下一个版本的Grid,TemplateField修改回3.1.3版本的源

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-1 08:12:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 七色北斗星 于 2012-8-1 08:13 编辑

强列建议将3.1.8的Grid,TemplateField修改回3.1.3版本的源码
因为我系统内的角色权限配置用的是Grid,TemplateField,CheckBoxList控件,
3.1.3的后台取值是通过Request.Form.AllKeys获取的,CheckBoxList内的每一个单个控件都会生成一个key("Grid1_0$cbList$0","Grid1_0$cbList$1","Grid1_0$cbList$2","Grid1_1$cbList$0","Grid1_1$cbList$1","Grid1_1$cbList$2"),这样可以取出2行3列的值。
3.1.8的通过Request.Form.AllKeys获取的值是("Panel1$Grid1$c1r7$cbList$0","Panel1$Grid1$c1r7$cbList$1"),只能取出两列,里面的子项是无法获取到的。

以下是两个版本的参照对比,从3.1.4一直到3.1.8都是不能用的,或许是我没找到新版的取值方法,如果有谁能取到新版的值请不吝赐教。
3.1.3版的
  1.         internal override string GetColumnValue(GridRow row)
  2.         {
  3.             string result = String.Empty;

  4.             if (_itemTemplate != null)
  5.             {
  6.                 StringBuilder output = new StringBuilder();
  7.                 using (StringWriter sw = new StringWriter(output, CultureInfo.CurrentCulture))
  8.                 {
  9.                     using (HtmlTextWriter htw = new HtmlTextWriter(sw))
  10.                     {
  11.                         using (GridRowControl control = new GridRowControl(row.DataItem, row.RowIndex))
  12.                         {
  13.                             _itemTemplate.InstantiateIn(control);
  14.                             control.ID = String.Format("{0}_{1}", Grid.ID, row.RowIndex);
  15.                             control.DataBind();

  16.                             control.RenderControl(htw);
  17.                         }
  18.                     }
  19.                 }

  20.                 result = output.ToString();
  21.             }

  22.             return result;
  23.         }
复制代码

3.1.8版的
  1.         internal override string GetColumnValue(GridRow row)
  2.         {
  3.             GridRowControl control = row.TemplateContainers[ColumnIndex];
  4.                         return String.Format("#@TPL@#{0}", control.ClientID);
  5.             //return String.Format("<div id="{0}_container"></div>", control.ClientID);
  6.             //string result = String.Empty;            //if (_itemTemplate != null)
  7.             //{
  8.             //    StringBuilder output = new StringBuilder();
  9.             //    using (StringWriter sw = new StringWriter(output, CultureInfo.CurrentCulture))
  10.             //    {
  11.             //        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
  12.             //        {
  13.             //            //using (GridRowControl control = new GridRowControl(row.DataItem, row.RowIndex))
  14.             //            //{
  15.             //            //    _itemTemplate.InstantiateIn(control);
  16.             //            //    control.ID = String.Format("{0}_{1}", Grid.ID, row.RowIndex);
  17.             //            //    control.DataBind();            //            //    control.RenderControl(htw);            //            //}
  18.             //            //GridRowControl control = row.TemplateContainers[ColumnIndex];
  19.             //            //if (control != null)
  20.             //            //{
  21.             //            //    control.DataBind();
  22.             //            //    //control.RenderControl(htw);
  23.             //            //}
  24.             //        }
  25.             //    }            //    result = output.ToString();
  26.             //}            //return result;
  27.         }
复制代码
我尝试过用FindControl取值,但无论选中的项是选中还是未选中,都会False,最终只能用上面的Request.Form.AllKeys来获取。
System.Web.UI.WebControls.CheckBoxList cbList = (System.Web.UI.WebControls.CheckBoxList)Grid1.Rows[0].FindControl("cbList");


沙发
 楼主| 发表于 2012-8-2 03:22:54 | 只看该作者
没有人遇到过这样的问题吗
板凳
发表于 2012-8-2 09:40:37 | 只看该作者
可以直接通过FindControl来获取CheckBoxList的值,正好AppBox中设置权限用到了,类似的代码如下:
  1. AspNet.CheckBoxList ddlOthers = (AspNet.CheckBoxList)Grid2.Rows[rowIndex].FindControl("ddlOthers");

  2.                 JObject otherPowerObj = new JObject();
  3.                 foreach (AspNet.ListItem item in ddlOthers.Items)
  4.                 {
  5.                     if (item.Selected)
  6.                     {
  7.                         otherPowerObj.Add(item.Value, true);
  8.                     }
  9.                 }
复制代码
我等下会写个类似的例子放到在线示例上。
地板
发表于 2012-8-2 10:04:37 | 只看该作者
增加了新的示例,来重现你的这种情况,可以等会下载源代码,自己运行一下:

本帖子中包含更多资源

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

x
5#
发表于 2012-8-2 10:21:19 | 只看该作者
下载这个源代码,自己编译下,就能看到这个示例:80753
6#
 楼主| 发表于 2012-8-6 09:38:06 | 只看该作者
sanshi 发表于 2012-8-2 10:21
下载这个源代码,自己编译下,就能看到这个示例:80753

谢谢三石老况,我下载试试
7#
 楼主| 发表于 2012-8-9 05:26:11 | 只看该作者
本帖最后由 七色北斗星 于 2012-8-9 05:30 编辑
sanshi 发表于 2012-8-2 10:04
增加了新的示例,来重现你的这种情况,可以等会下载源代码,自己运行一下:
...

三石老兄你好,感谢上次你做的示例,但还是有点小Bug,我想可能是底层的问题,如下两张图,模板列内每行的CheckBoxList内的项的数量是不定的,这样每行动态绑定出的CheckBoxList会出问题,目前是列表内相同项会被绑定,不同项则不会被绑定,不知错误出现在哪里,请帮忙看一下。

图一:3.1.3原版


图二:3.1.8新版

本帖子中包含更多资源

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

x
8#
发表于 2012-8-9 08:04:03 来自手机 | 只看该作者
七色北斗星 发表于 2012-8-9 05:26
三石老兄你好,感谢上次你做的示例,但还是有点小Bug,我想可能是底层的问题,如下两张图,模板列内每行的 ...

appbox就是每行的checkbox中的项数不同。如果还有问题,写个能运行的示例
9#
 楼主| 发表于 2012-8-14 01:04:50 | 只看该作者
support 发表于 2012-8-9 08:04
appbox就是每行的checkbox中的项数不同。如果还有问题,写个能运行的示例

我找到问题所在了,是webconfig里的配置节的问题
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">

我之前的是<pages>里面的属性没有,所以才会出现那样的错误,问题解决了,谢谢各位朋友
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-30 12:54 , Processed in 0.047910 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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