#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
|
{
|
/// <summary>
|
/// 绑定带分隔符字符串的数据
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 绑定数据源
|
/// </summary>
|
/// <param name="items"></param>
|
public void BindingDataSource(string[] items)
|
{
|
foreach (var item in items)
|
lists.Items.Add(item, item, CheckState.Unchecked, true);
|
}
|
|
/// <summary>
|
/// 绑定数据源
|
/// </summary>
|
/// <param name="dataSource"></param>
|
/// <param name="valueMember"></param>
|
/// <param name="displayMember"></param>
|
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);
|
}
|
|
/// <summary>
|
/// 获取所有已勾选项目的值,中间用分隔符分开
|
/// </summary>
|
/// <returns></returns>
|
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);
|
}
|
|
/// <summary>
|
/// 当勾选状态改变时发生。
|
/// </summary>
|
[Description("当勾选状态改变时发生。")]
|
public event EventHandler OnCheckStateChanged
|
{
|
add => _OnCheckStateChanged += value;
|
remove => _OnCheckStateChanged -= value;
|
}
|
|
/// <summary>
|
/// 设置指定项目为勾选状态
|
/// </summary>
|
/// <param name="value"></param>
|
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;
|
}
|
}
|
}
|
}
|