#region using System; using System.ComponentModel; using System.Data; using System.Windows.Forms; using CSFrameworkV5.Core; using DevExpress.XtraEditors.Controls; using ItemCheckEventArgs = DevExpress.XtraEditors.Controls.ItemCheckEventArgs; #endregion namespace CSFrameworkV5.Library.UserControls { /// /// 绑定带分隔符字符串的数据 /// public partial class ucCheckedListBoxBinding : UserControl { private string _EditValue = ""; private EventHandler _OnCheckStateChanged; private string _Seperator = ","; public ucCheckedListBoxBinding() { InitializeComponent(); } [Description("返回列表中已勾选的值,以分隔符隔开。")] public string EditValue { get { _EditValue = GetItemCheckedValue(); return _EditValue; } set { _EditValue = value; SetItemChecked(value); } } [DefaultValue(",")] [Description("多个值中间的分隔符.如:AA,BB,CC。")] public string ItemSeperator { get => _Seperator; set => _Seperator = value; } [Description("返回的文本。")] public override string Text { get => EditValue; set => EditValue = value; } /// /// 绑定数据源 /// /// public void BindingDataSource(string[] items) { foreach (var item in items) lists.Items.Add(item, item, CheckState.Unchecked, true); } /// /// 绑定数据源 /// /// /// /// public void BindingDataSource(DataTable dataSource, string valueMember, string displayMember) { foreach (DataRow row in dataSource.Rows) lists.Items.Add(row[valueMember], row[displayMember].ToStringEx(), CheckState.Unchecked, true); } /// /// 获取所有已勾选项目的值,中间用分隔符分开 /// /// private string GetItemCheckedValue() { var result = ""; foreach (CheckedListBoxItem item in lists.Items) if (item.CheckState == CheckState.Checked) result = result + "," + item.Value; return result == "" ? "" : result + _Seperator; } private void lists_ItemCheck(object sender, ItemCheckEventArgs e) { if (_OnCheckStateChanged != null) _OnCheckStateChanged(lists, e); } private void lists_SelectedValueChanged(object sender, EventArgs e) { if (_OnCheckStateChanged != null) _OnCheckStateChanged(lists, e); } /// /// 当勾选状态改变时发生。 /// [Description("当勾选状态改变时发生。")] public event EventHandler OnCheckStateChanged { add => _OnCheckStateChanged += value; remove => _OnCheckStateChanged -= value; } /// /// 设置指定项目为勾选状态 /// /// private void SetItemChecked(string value) { var items = value.Split(new[] { _Seperator }, StringSplitOptions.None); lists.UnCheckAll(); foreach (CheckedListBoxItem item in lists.Items) foreach (var s in items) if (s.ToLower() == item.Value.ToStringEx().ToLower()) { item.CheckState = CheckState.Checked; break; } } } }