`

允许空值的下拉框

阅读更多

 

LSComboBoxItem.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Longshine.SLLib.InputControls.LSComboBox.LSNullableComboBox
{
    public class LSComboBoxItem
    {
        /// <summary>
        /// 显示字段 (DisplayMemberPath)
        /// </summary>
        public string DisplayString { get; set; }

        /// <summary>
        /// 选中项 (SelectedValuePath)
        /// </summary>
        public object ItemValue { get; set; }
    }
}

LSComboBoxItemList.cs

using System.Collections.Generic;

namespace Longshine.SLLib.InputControls.LSComboBox.LSNullableComboBox
{
    public class ComboBoxItemList<T> : List<LSComboBoxItem>
    {
        public delegate string GetDisplayString(T t);

        public ComboBoxItemList(bool addEmptyItem, IEnumerable<T> items, GetDisplayString getDisplayString)
        {
            if (addEmptyItem)
            {
                Add(new LSComboBoxItem { DisplayString = "------", ItemValue = null });
            }

            if (items != null)
            {
                foreach (T item in items)
                {
                    Add(new LSComboBoxItem { DisplayString = getDisplayString(item), ItemValue = item });
                }
            }
        }
    }
}

 LSEnhancedComboBox.cs

using System.Windows;
using System.Windows.Controls;

namespace Longshine.SLLib.InputControls
{
    /// <summary>
    /// 有默认空值的下拉框
    /// </summary>
    public class LSEnhancedComboBox : ComboBox
    {
        public static readonly DependencyProperty SelectedValuePathProperty = DependencyProperty.Register("SelectedValuePath", typeof(string), typeof(LSEnhancedComboBox), new PropertyMetadata(new PropertyChangedCallback(SelectedValuePathPropertyChanged)));

        public static readonly DependencyProperty SelectedValueProperty = DependencyProperty.Register("SelectedValue", typeof(object), typeof(LSEnhancedComboBox), new PropertyMetadata(new PropertyChangedCallback(SelectedValuePropertyChanged)));

        public LSEnhancedComboBox()
            : base()
        {
            this.DisplayMemberPath = "DisplayString";
            this.SelectedValuePath = "ItemValue";
            base.SelectionChanged += new SelectionChangedEventHandler(ComboBoxClassic_SelectionChanged);
        }

        protected void ComboBoxClassic_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (SelectedItem != null && !string.IsNullOrEmpty(SelectedValuePath))
            {
                SetValue(LSEnhancedComboBox.SelectedValueProperty, SelectedItem.GetType().GetProperty(SelectedValuePath).GetValue(SelectedItem, null));
            }
        }

        static void SelectedValuePathPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
        }

        static void SelectedValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            LSEnhancedComboBox cmb = (LSEnhancedComboBox)d;

            foreach (var item in cmb.Items)
            {
                var currentValue = item.GetType().GetProperty(cmb.SelectedValuePath).GetValue(item, null);
                if (currentValue == null && e.NewValue == null)
                {
                    cmb.SelectedItem = item;
                    return;
                }
                if (currentValue != null)
                {
                    if (currentValue.Equals(e.NewValue))
                    {
                        cmb.SelectedItem = item;
                        return;
                    }
                }
            }
            cmb.SelectedIndex = -1;
        }

        public string SelectedValuePath
        {
            get { return (string)GetValue(LSEnhancedComboBox.SelectedValuePathProperty); }
            set { SetValue(LSEnhancedComboBox.SelectedValuePathProperty, value); }
        }

        public object SelectedValue
        {
            get { return GetValue(SelectedValueProperty); }
            set { SetValue(LSEnhancedComboBox.SelectedValueProperty, value); }
        }

    }
}

使用:

<inputcontrols:LSEnhancedComboBox x:Name="cbRYType" Grid.Column="1" Grid.Row="1"/>
 
void cbRYType_Loaded(object sender, RoutedEventArgs e)
        {
            var ws = WcfServiceClientFactory<ComServiceClient, ComService>.CreateServiceClient();
            ws.GetCodeTableDataCompleted += (ss, e2) =>
                {
                    if (e2.Error != null)
                        System.Windows.Browser.HtmlPage.Window.Alert(e2.Error.Message);
                    else
                    {
                        if (e2.Result == null) return;

                        ComboBoxItemList<CodeEntity> dataList = new ComboBoxItemList<CodeEntity>(true,
                                                                     e2.Result,
                                                                     c => c.MC0000);
                        this.cbRYType.ItemsSource = dataList;
                        this.cbRYType.SelectedIndex = 0;
                    }

                };
            ws.GetCodeTableDataAsync("BM_KK");
        }

 界面:

 

 

 

  • 大小: 5.1 KB
分享到:
评论

相关推荐

    javascript经典特效---下拉框的新特性.rar

    7. 表单验证:在表单提交前,JavaScript可以检查下拉框是否有效选择,防止空值提交,提供友好的错误提示。 8. 联动效果:在多个下拉框之间实现联动,当用户在一个下拉框中做出选择时,根据所选值动态更新其他下拉框...

    jquery获取下拉列表的值为null的解决方法

    如果因为某些原因(比如后端数据库要求不允许空值)必须要处理字符串“null”,我们可以考虑一些非常规的解决方案。例如,修改jQuery的源代码,像文档中提到的那样,将.val()函数的实现中关于赋值的部分稍微改写。...

    layui表单验证select下拉框实现验证的方法

    同时,layui的`lay-search`属性则用于开启搜索框功能,允许用户在下拉框中输入关键词进行筛选。 总的来说,layui表单验证对于select下拉框的处理需要注意默认选项的`value`属性,这是验证生效的关键。同时,掌握...

    风越.net代码生成器 v3.5

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    风越asp代码生成器 V3.5

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    风越ASP代码生成器 2.4

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接批量...

    对绑定的下拉列表Dropdownlist,可以进行搜索

    3. **配置**:Chosen提供多种配置选项,如`allow_single_deselect`(允许选择空值)、`disable_search_threshold`(指定多少个选项后开启搜索功能)等,可以根据需求调整。 4. **事件监听**:可以通过监听`change`、...

    Extjs实现下拉菜单效果

    4. **allowBlank**: 如果设为`false`,则不允许为空值。 5. **multiSelect**: `true`表示支持多选,用户可以选择多个树节点。 6. **listConfig**: 配置下拉列表的样式,如最小宽度、最大宽度和是否可调整大小。 7...

    风越.net代码生成器v2.9

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    MaskEdit控件

    - 验证用户输入时,要考虑空值和非法字符的情况。 - 考虑到跨文化输入,掩码设计需兼容不同地区的格式习惯。 通过了解和熟练运用MaskEdit控件,VB初学者能够更好地控制用户界面的交互,提高程序的用户体验,同时...

    excel下拉菜单怎么做参考.doc

    4. 在“允许”下拉框中,选择“序列”。 5. 勾选“忽略空值”和“提供下拉箭头”选项。 6. 在“来源”文本框中,输入序列数据,如“男,女”,确保逗号为英文逗号。 7. 点击“确定”按钮,下拉菜单即设置完成。 ### ...

    验证测试标准

    如果下拉框数据值过多时,下拉框可能会超出 IE 显示范围,此种情况不能够被接收。 四、大文本输入框(textArea)和文件输入框 大文本输入框需要注意的是,应该允许标点的存在,并且需要对输入字符的长度限制,并...

    风越ASP代码生成器2.8

    根据数据库字段允许空值状态自动设置输入检测代码 页面皮肤模板设置,根据网页模板快速生成页面 ★ 设置指定字段在编辑信息时为只读状态 字段需要二次输入(如输入两次密码,以验证其正确性) ★ 在列表中直接...

    excel中实现多级下拉菜单

    然后,我们需要勾选"忽略空值"复选框和"提供下拉箭头"复选框,单击"确定"按钮,关闭"数据有效性"对话框。 第三步:设置下一级数据有效性 在 B2:B11区域中,我们需要设置下一级数据有效性,允许用户选择城市。在...

    生成XML工具

    这类工具通常允许用户通过Excel等表格软件来设定数据结构和内容,然后自动生成符合要求的XML文件,极大地简化了XML的创建过程。 描述中提到,该工具主要用于生成下拉框的XML文件。下拉框在网页或应用程序中常见,...

    excel设置下拉选项、级联、列头锁定.docx

    级联下拉框允许根据前一列的选择动态显示后续列的选项。 #### WPS 1. 准备级联数据,例如3级级联,先建立一二级级联。 2. 选中数据,点击“公式”菜单,选择“指定”。 3. 勾选“最左列”,按提示操作。 4. 对一级...

Global site tag (gtag.js) - Google Analytics