FineUI 官方论坛
标题:
下拉列表DropDownList的FindByValue方法失效修正。
[打印本页]
作者:
Moongg
时间:
2014-2-20 13:48
标题:
下拉列表DropDownList的FindByValue方法失效修正。
这几天在做控件的反射,用到
DropDownList1.Items.FindByText 和
DropDownList1.Items.FindByValue,反觉是无效的,以下为修复过程。
请三石确认一下是否为bug。如是,请修正。
ASPX页面
<x:DropDownList ID="DropDownList1" runat="server" Label="Label">
<x:ListItem Text="请选择" Value="0" />
<x:ListItem Text="男" Value="男" />
<x:ListItem Text="女" Value="女" />
</x:DropDownList>
复制代码
cs 页面
//DropDownList1.SelectedValue = "男"; // OK
//DropDownList1.SelectedIndex = 1; // OK
DropDownList1.Items.FindByText("男").Selected = true; // 失败
DropDownList1.Items.FindByValue("男").Selected = true; // 失败
复制代码
定位到
DropDownList1.SelectedValue ,同样调用了
FindByValue,
set
{
foreach (ListItem item2 in Items)
{
item2.Selected = false; //注意这里的循环
}
if (value != null)
{
ListItem item = Items.FindByValue(value);
if (item != null)
{
item.Selected = true;
}
}
}
复制代码
定位到 DropDownList1.Items.FindByValue
public ListItem FindByValue(string value)
{
IEnumerator enumerator = GetEnumerator();
while (enumerator.MoveNext())
{
ListItem item = enumerator.Current as ListItem;
if (item != null && item.Value == value)
{
return item;
}
}
return null;
}
复制代码
区别在于
DropDownList1.SelectedValue 有这个循环
foreach (ListItem item2 in Items)
{
item2.Selected = false;
}
于是改造:在 DropDownList1.Items.FindByValue 的循环中加入
item.Selected = false;变成
while (enumerator.MoveNext())
{
ListItem item = enumerator.Current as ListItem;
item.Selected = false;
if (item != null && item.Value == value)
{
return item;
}
}
复制代码
DropDownList1.SelectedValue 的循环可以注释掉,然后测试:
//DropDownList1.SelectedValue = "男"; // OK
//DropDownList1.SelectedIndex = 1; // OK
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;
//}
报告完毕!!!!
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4