#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;
}
}
}
}