using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Windows.Forms;
namespace Nbjjy.Utilities
{
public static class ControlHelper
{
#region 數據源
/// <summary>
/// 獲取或設置源,該源包含用於填充控件中的項的值列表。
/// </summary>
private static object dataSource;
public static object DataSource
{
get
{
if (dataSource is DataSet)
{
DataSet ds = dataSource as DataSet;
dataSource = ds.Tables[0];
}
else if (dataSource is DataTable)
{
DataTable dt = dataSource as DataTable;
dataSource = dt;
}
else if (dataSource is DataView)
{
DataView dv = dataSource as DataView;
dataSource = dv;
}
else if (dataSource is IDataReader)
{
IDataReader dr = dataSource as IDataReader;
dataSource = dr;
}
else if (dataSource is IEnumerable)
{
IEnumerable objList = dataSource as IEnumerable;
List<object> list = new List<object>();
foreach (object obj in objList)
{
list.Add(obj);
}
dataSource = list;
}
return dataSource;
}
set
{
dataSource = value;
}
}
#endregion
#region WebUI綁定Control
/// <summary>
///WebUI綁定Control
/// </summary>
/// <param name="control">定義由所有 ASP.NET 服務器控件共享的屬性、方法和事件。</param>
/// <param name="dataSource">獲取或設置源,該源包含用於填充控件中的項的值列表。</param>
public static void BindControl(System.Web.UI.Control control, object dataSource)
{
DataSource = dataSource;
if (control is System.Web.UI.WebControls.DataList)
{
(control as System.Web.UI.WebControls.DataList).DataSource = DataSource;
(control as System.Web.UI.WebControls.DataList).DataBind();
}
else if (control is System.Web.UI.WebControls.GridView)
{
(control as System.Web.UI.WebControls.GridView).DataSource = DataSource;
(control as System.Web.UI.WebControls.GridView).DataBind();
}
else if (control is System.Web.UI.WebControls.Repeater)
{
(control as System.Web.UI.WebControls.Repeater).DataSource = DataSource;
(control as System.Web.UI.WebControls.Repeater).DataBind();
}
}
/// <summary>
///WebUI綁定Control
/// </summary>
/// <param name="control">定義由所有 ASP.NET 服務器控件共享的屬性、方法和事件。</param>
/// <param name="dataSource">獲取或設置源,該源包含用於填充控件中的項的值列表。</param>
/// <param name="dataTextField">獲取或設置為列表項提供文本內容的數據源字段。</param>
/// <param name="dataValueField">獲取或設置為各列表項提供值的數據源字段。</param>
public static void BindControl(System.Web.UI.Control control, object dataSource, string dataTextField, string dataValueField)
{
DataSource = dataSource;
if (control is System.Web.UI.WebControls.CheckBoxList)
{
(control as System.Web.UI.WebControls.CheckBoxList).DataSource = DataSource;
(control as System.Web.UI.WebControls.CheckBoxList).DataTextField = dataTextField;
(control as System.Web.UI.WebControls.CheckBoxList).DataValueField = dataValueField;
(control as System.Web.UI.WebControls.CheckBoxList).DataBind();
}
else if (control is System.Web.UI.WebControls.DropDownList)
{
(control as System.Web.UI.WebControls.DropDownList).DataSource = DataSource;
(control as System.Web.UI.WebControls.DropDownList).DataTextField = dataTextField;
(control as System.Web.UI.WebControls.DropDownList).DataValueField = dataValueField;
(control as System.Web.UI.WebControls.DropDownList).DataBind();
}
else if (control is System.Web.UI.WebControls.RadioButtonList)
{
(control as System.Web.UI.WebControls.RadioButtonList).DataSource = DataSource;
(control as System.Web.UI.WebControls.RadioButtonList).DataTextField = dataTextField;
(control as System.Web.UI.WebControls.RadioButtonList).DataValueField = dataValueField;
(control as System.Web.UI.WebControls.RadioButtonList).DataBind();
}
else if (control is System.Web.UI.WebControls.BulletedList)
{
(control as System.Web.UI.WebControls.BulletedList).DataSource = DataSource;
(control as System.Web.UI.WebControls.BulletedList).DataTextField = dataTextField;
(control as System.Web.UI.WebControls.BulletedList).DataValueField = dataValueField;
(control as System.Web.UI.WebControls.BulletedList).DataBind();
}
}
#endregion
#region WinUI綁定Control
/// <summary>
/// DataGridView綁定
/// </summary>
/// <param name="dataGridView">在可自定義的網格中顯示數據。</param>
/// <param name="dataSource">獲取或設置數據源中 System.Windows.Forms.DataGridView 顯示其數據的列表或表的名稱。</param>
public static void BindControl(System.Windows.Forms.DataGridView dataGridView, object dataSource)
{
DataSource = dataSource;
dataGridView.DataSource = DataSource;
}
/// <summary>
/// ListView綁定
/// </summary>
/// <param name="listView">表示 Windows 列表視圖控件,該控件顯示可用四種不同視圖之一顯示的項集合。</param>
/// <param name="text">獲取或設置該項的文本。</param>
/// <param name="value">基於數組創建新子項,並將其添加到集合中。[可空參數]</param>
/// <param name="view">每個項都顯示為一個最大化圖標,在它的下面有一個標簽。</param>
public static void BindControl(System.Windows.Forms.ListView listView, string text, string[] value, System.Windows.Forms.View view)
{
listView.View = view;
ListViewItem lvi = new ListViewItem();
lvi.Text = text;
listView.Items.Add(lvi);
if (value != null)
{
lvi.SubItems.AddRange(value);
}
}
/// <summary>
/// WinUI綁定Control
/// </summary>
/// <param name="control">定義控件的基類,控件是帶有可視化表示形式的組件。ID</param>
/// <param name="dataSource">獲取或設置此 System.Windows.Forms.Control 的數據源。</param>
/// <param name="displayMember">獲取或設置要為此 System.Windows.Forms.Control 顯示的屬性。</param>
/// <param name="valueMember">獲取或設置一個屬性,該屬性將用作 System.Windows.Forms.Control 中的項的實際值。</param>
public static void BindControl(System.Windows.Forms.Control control, object dataSource, string displayMember, string valueMember)
{
DataSource = dataSource;
if (control is System.Windows.Forms.ComboBox)
{
(control as System.Windows.Forms.ComboBox).DataSource = DataSource;
(control as System.Windows.Forms.ComboBox).DisplayMember = displayMember;
(control as System.Windows.Forms.ComboBox).ValueMember = valueMember;
}
else if (control is System.Windows.Forms.CheckedListBox)
{
(control as System.Windows.Forms.CheckedListBox).DataSource = DataSource;
(control as System.Windows.Forms.CheckedListBox).DisplayMember = displayMember;
(control as System.Windows.Forms.CheckedListBox).ValueMember = valueMember;
}
else if (control is System.Windows.Forms.ListBox)
{
(control as System.Windows.Forms.ListBox).DataSource = DataSource;
(control as System.Windows.Forms.ListBox).DisplayMember = displayMember;
(control as System.Windows.Forms.ListBox).ValueMember = valueMember;
}
}
#endregion
}
}
調用方法:
List<Model.BaseItemsType> list = BLL.BaseItemsType.GetList("", "");
foreach (Model.BaseItemsType model in list)
{
ControlHelper.BindControl(this.listView1, model.FullName, null, View.List);
}
ControlHelper.BindControl(this.dataGridView1, list);
ControlHelper.BindControl(this.comboBox1, list, "FullName", "Id");
ControlHelper.BindControl(this.listBox1, list, "FullName", "Id");
ControlHelper.BindControl(this.checkedListBox1, list, "FullName", "Id");
//DataTable list = BLL.BaseItemsType.GetDataTable("", "");
//DataSet list = BLL.BaseItemsType.GetDataSet("", "");
//DataView list = BLL.BaseItemsType.GetDataView("", "");
//for (int i = 0; i < list.Count; i++)
//{
// ControlHelper.BindControl(this.listView1, list.Table.Rows[i]["FullName"].ToString(), null, View.List);
//}
//for (int i = 0; i < list.Tables[0].Rows.Count; i++)
//{
// ControlHelper.BindControl(this.listView1, list.Tables[0].Rows[i]["FullName"].ToString(), null, View.List);
//}
//for (int i = 0; i < list.Rows.Count; i++)
//{
// ControlHelper.BindControl(this.listView1, list.Rows[i]["FullName"].ToString(), null, View.List);
//}