對於資料繫結控制項的開發,其主要的要點如下:
1、 定義控制項實現inamingcontainer介面;
2、 對於基於模板的資料繫結控制項還需要實現模板屬性;
3、 實現有關資料繫結的內容,包括建立datasource和databind方法等;
4、 使用資料來源或者viewstate資料建立子控制項層次結構。
以上四點是開發基於模板的資料繫結控制項的基本要點,在vs.net中提供的比較典型的模板資料繫結控制項就是datagrid了,下面我們來實際做乙個例子實現類似與datagrid的模板化繫結的效果。
例子共包括兩個主要檔案:實現模板容器的item.cs檔案和實現控制項主體的databindtmp.cs檔案,兩個檔案的**如下:
item.cs
using system;
using system.web.ui;
using system.web.ui.webcontrols;
using system.componentmodel;
namespace hdkj.ying
public override controlcollection controls
}public object dataitem
set}}}
databindtmp.cs
using system;
using system.web.ui;
using system.web.ui.webcontrols;
using system.componentmodel;
using system.collections;
namespace hdkj.ying
set}
#endregion
#region 屬性headertemplate
[browsable(true),
defaultvalue(null),
persistencemode(persistencemode.innerproperty),
templatecontainer(typeof(itemtmp))
]public virtual itemplate headertemplate
set}
#endregion
#region 屬性datasource
[bindable(true),
description("獲取或者設定資料來源"),
category("data"),
defaultvalue(null),
designerserializationvisibility(designerserializationvisibility.content)
]public virtual object datasource
setelse}}
#endregion
#region 屬性datamember
[category("data"),
defaultvalue(""),
description("獲取或者設定繫結的資料成員.")
]public virtual string datamember
set}
#endregion
#endregion
#region 實現控制項呈現
//重寫createchildcontrols
protected override void createchildcontrols()
}//使用資料來源或者viewstate建立控制項層次結構
protected virtual void createcontrolhierarchy(bool usedatasource)
else
if (datasource != null)
headerrow.cells.add(headeritem);
}ienumerator dataitems = datasource.getenumerator();
while(dataitems.movenext())
itemrow.cells.add(item);
if(usedatasource)
itemcount++;}}
if (usedatasource)
}#endregion
#region 實現資料繫結及相關
public override void databind()
//獲取資料源,將資料來源中的資料都轉換為ienumerable型別
protected virtual ienumerable getdatasource()
ienumerable resolveddatasource = _datasource as ienumerable;
if (resolveddatasource != null)
ilistsource listsource = _datasource as ilistsource;
if (listsource != null)
itypedlist typedmemberlist = memberlist as itypedlist;
if (typedmemberlist != null)
else
if (memberproperty != null)
}throw new exception("未能找到有效的datamember.");
}throw new exception("資料來源中不包含任何資料物件.");}}
return null;
}
private propertydescriptor getcolumnpropertydescriptors(object dataitem)
}props.sort(new propertydescriptorcomparer());
propertydescriptor columns = new propertydescriptor[props.count];
props.copyto(columns, 0);
return columns;
}private sealed class propertydescriptorcomparer : icomparer
}#endregion}}
databindtmp2.datasource = dvtmp;
databindtmp2.databind();
}通過上述即實現了乙個比較簡單的模板化資料繫結控制項,乙個比較有實用價值的應用是展示圖書資訊的應用。具體的**編制還需要根據實際應用的需要進行調整。
資料控制項繫結
1.asp.net資料繫結控制項分為三大類,每個類分別進行詳細 列表式資料繫結控制項 列表式資料繫結控制項常用來在乙個 內的乙個字段進行繫結。顯示乙個欄位下所有資料的資訊。它包括以下幾個控制項 bulletedlist checkboxlist dropdownlist listbox radiob...
資料繫結控制項的資料繫結技巧
資料繫結控制項用法如下 例如 datalist控制項的image要繫結指定的路徑 imageurl eval 資料庫字段 admin uploading 格式化指定日期字段 asp textbox id textbox1 text eval 資料庫字段 runat server asp textbo...
DataGridView控制項繫結資料
我們在使用datagridview的列樣式的時候很方便,可以設定成comboboxcolumn,textboxcolumn等等樣式,使用起來非常方便,但是,這樣設定的列都採用同一種樣式.對同一列採用多種樣式的,就需要單獨對單元格進行操作了.具體方法如下 1.例項化乙個定義好的控制項 如combobo...