FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

搜索
查看: 4256|回复: 0
打印 上一主题 下一主题

下拉列表DropDownList的FindByValue方法失效修正。

[复制链接]
跳转到指定楼层
楼主
发表于 2014-2-20 13:48:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
反馈BUG
程序版本: 3.3.3
浏览器: Chrome Firefox IE10 IE9 IE8 其它(请在帖子中注明浏览器及版本) 
BUG截图:
BUG地址: -
这几天在做控件的反射,用到 DropDownList1.Items.FindByText 和 DropDownList1.Items.FindByValue,反觉是无效的,以下为修复过程。


请三石确认一下是否为bug。如是,请修正。


ASPX页面

  1. <x:DropDownList ID="DropDownList1" runat="server" Label="Label">
  2.             <x:ListItem Text="请选择" Value="0" />
  3.             <x:ListItem Text="男" Value="男" />
  4.             <x:ListItem Text="女" Value="女" />
  5.         </x:DropDownList>
复制代码

cs 页面
  1. //DropDownList1.SelectedValue = "男"; // OK
  2.                 //DropDownList1.SelectedIndex = 1; // OK

  3.                 DropDownList1.Items.FindByText("男").Selected = true; // 失败
  4.                 DropDownList1.Items.FindByValue("男").Selected = true; // 失败
复制代码
定位到 DropDownList1.SelectedValue ,同样调用了 FindByValue,
  1. set
  2.             {
  3.                 foreach (ListItem item2 in Items)
  4.                 {
  5.                     item2.Selected = false;  //注意这里的循环
  6.                 }

  7.                 if (value != null)
  8.                 {
  9.                     ListItem item = Items.FindByValue(value);
  10.                     if (item != null)
  11.                     {
  12.                         item.Selected = true;
  13.                     }
  14.                 }
  15.             }
复制代码

定位到 DropDownList1.Items.FindByValue
  1. public ListItem FindByValue(string value)
  2.         {
  3.             IEnumerator enumerator = GetEnumerator();

  4.             while (enumerator.MoveNext())
  5.             {
  6.                 ListItem item = enumerator.Current as ListItem;

  7.                 if (item != null && item.Value == value)
  8.                 {
  9.                     return item;
  10.                 }
  11.             }

  12.             return null;
  13.         }
复制代码

区别在于 DropDownList1.SelectedValue 有这个循环
foreach (ListItem item2 in Items)
{
     item2.Selected = false;
}


于是改造:在 DropDownList1.Items.FindByValue 的循环中加入
item.Selected = false;变成
  1. while (enumerator.MoveNext())
  2.             {
  3.                 ListItem item = enumerator.Current as ListItem;

  4.                 item.Selected = false;

  5.                 if (item != null && item.Value == value)
  6.                 {
  7.                     return item;
  8.                 }
  9.             }
复制代码
DropDownList1.SelectedValue 的循环可以注释掉,然后测试:
  1. //DropDownList1.SelectedValue = "男"; // OK
  2. //DropDownList1.SelectedIndex = 1; // OK

  3. DropDownList1.Items.FindByValue("男").Selected = true; // 正常,同理设置以下:
复制代码
FineUI_v3.3.3_source_all\FineUI\WebControls\Field.TextField.DropDownList\ListItem\ListItemCollection.cs
1、FindByValue方法的的 while (enumerator.MoveNext()) 加入 item.Selected = false;

2、FineUI_v3.3.3_source_all\FineUI\WebControls\Field.TextField.DropDownList\DropDownList.cs 中的
public string SelectedValue 的set属性 注释:以下
//foreach (ListItem item2 in Items)
                //{
                //    item2.Selected = false;
                //}




报告完毕!!!!



本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-29 01:22 , Processed in 0.047946 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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