datatable動态修改列值?接上一篇文章C#控件美化之路(9):美化控件ListBox,我來為大家科普一下關于datatable動态修改列值?以下内容希望對你有幫助!
datatable動态修改列值
接上一篇文章。
C#控件美化之路(9):美化控件ListBox
主要是功能拓展。一個ListBox 添加數據時候往往都是循環添加
往往在開發中 查詢數據庫中的内容,然後隻需要展示一列數據。一般使用listBox比較多,這篇文章就是将一個DataTable 綁定數據再封裝一次。
封裝完成後,僅需要一行代碼即可完成數據綁定。是不是很方便。在開發中也能事半功倍。
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Text");
dt.Columns.Add("Text1");
for (int i = 0; i < 50; i )
{
dt.Rows.Add(i, "TEST" i);
}
wenListBox1.DataSource = dt;
綁定數據 首先讓當前需要綁定數據類型
本文主要講解綁定DataTable ,在實際開發中DataTable使用是相對比較多。
既然綁定DataTable 就要讓在綁定中知道綁定是哪一列數據。這個需要預先配置。
可以增加一個共有屬性
[Category("WenData"), Description("綁定數據列"), DefaultValue(null)]
public string ColumnName { get; set; }
在之後綁定數據,就直接獲取DataTable中指定屬性列數據。
增加綁定數據接收類,并且接受到數據後綁定處理。
private object dataSource { get; set; }
[Browsable(false)]
public object DataSource
{
get => dataSource;
set
{
if (value != null)
{
dataSource = value;
DataBind();
}
}
}
綁定數據要檢查用戶賦值的數據是否為空,若為空,不處理。
實現方法
貼完整代碼塊
private void DataBind()
{
if (dataSource == null)
return;
this.Items.Clear();
IList lists = null;
if (dataSource is DataSet ds)
{
lists = ((IListSource)ds.Tables[0]).GetList();
}
else if (dataSource is IListSource listSource)
{
lists = listSource.GetList();
}
else if (dataSource is IList ilist)
{
lists = ilist;
}
//綁定數據
foreach (var ilist in lists)
{
if (ilist is DataRowView row)
{
Items.Add(row[ColumnName]);
}
else
{
List<System.Reflection.PropertyInfo> propertyInfos = new List<System.Reflection.PropertyInfo>(ilist.GetType().GetProperties());
string value = propertyInfos.Find(a => a.Name.ToUpper() == ColumnName.ToUpper())?.GetValue(ilist, null)?.ToString();
Items.Add(value);
}
}
}
拓展數據屬性,增加了List數據綁定。
本文主要演示如何綁定使用數據,當然在實際使用中避免多次if檢查,應該在檢查類型後,直接用一個獨立方法執行循環,避免多次檢查浪費資源,小夥伴可以自己按照需求更改一下即可。
關注文林軟控,帶你一起用C#美化封裝控件。