databinderԴ??
1.DataBinder.Evalç¨æ³
//æ¾ç¤ºäºä½å°æ°
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${ 0:F2}") %>
//{ 0:G}代表æ¾ç¤ºTrueæFalse
<ItemTemplate>
<asp:Image Width="" Height="" Border="0" runat="server"
AlternateText='<%# DataBinder.Eval(Container.DataItem,
"Discontinued", "{ 0:G}") %>'
ImageUrl='<%# DataBinder.Eval(Container.DataItem,
"Discontinued", "~/images/{ 0:G}.gif") %>' />
</ItemTemplate>
//转æ¢ç±»å
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring
(4,4)
{ 0:d} æ¥æåªæ¾ç¤ºå¹´ææ¥
{ 0:yyyy-mm-dd} ææ ¼å¼æ¾ç¤ºå¹´ææ¥
{ 0:c} è´§å¸æ ·å¼
2.Container.DataItemç¨æ³.
å¨ç»å®æ°æ®æ¶ç»å¸¸ä¼ç¨å°è¿ä¸ªå¥ç¨åºï¼<%# DataBinder.Eval
(Container.DataItem,"xxxx")%>æè <%# DataBinder.Eval
(Container,"DataItem.xxxx")%>
è¿æä¸ç§ï¼èä¸å¾®è½¯ä¹è¯´è¿ç§æ¹æ³çæçè¦æ¯ä»¥ä¸ä¸¤ç§é«ã
<%# ((DataRowView)Container.DataItem)["xxxx"]%>
å¾æç¨çï¼è¿æ ·å¯ä»¥å¨åå°é¡µé¢å好å¤äºæ äºã
è¿è¦è®°ä½è¦è¿æ ·ç¨å¿ é¡»è¦å¨åå°é¡µé¢å¯¼å ¥å称空é´System.Data,å¦åä¼çæé误信æ¯ã
<%@ Import namespace="System.Data" %>
è¿ç§ç¨æ³å ¶å®å<%# ((DictionaryEntry)Container.DataItem).Key%>æ¯ä¸ä¸ªéçã
å ³é®æ¯Containerè¿ä¸ªä¸è¥¿ï¼å®çå称空é´æ¯System.ComponentModelã
3.DataBinder.EvalåContainer.DataItemçåºå«
DataBinder.Eval(Container.DataItem,"Name")åContainer.DataItem("Name")æä»ä¹åºå«ï¼
DataBinderæ¯System.Webéé¢çä¸ä¸ªéæç±»ï¼å®æä¾äºEvalæ¹æ³ç¨äºç®åæ°æ®ç»å®è¡¨è¾¾å¼çç¼åï¼ä½æ¯å®ä½¿ç¨çæ¹å¼æ¯éè¿Reflectionçå¼éæ¯è¾å¤§çæ¹æ³æ¥è¾¾å°æç¨æ§ï¼å æ¤å ¶æ§è½å¹¶ä¸æ¯æ好çãèContaineråæ ¹æ¬ä¸æ¯ä»»ä½ä¸ä¸ªéæç对象ææ¹æ³ï¼å®æ¯ASP.NET页é¢ç¼è¯å¨å¨æ°æ®ç»å®äºä»¶å¤çç¨åºå é¨å£°æçå±é¨åéï¼å ¶ç±»åæ¯å¯ä»¥è¿è¡æ°æ®ç»å®çæ§ä»¶çæ°æ®å®¹å¨ç±»åï¼å¦å¨Repeaterå é¨çæ°æ®ç»å®å®¹å¨å«RepeaterItemï¼ï¼å¨è¿äºå®¹å¨ç±»ä¸åºæ¬é½æDataItemå±æ§ï¼å æ¤ä½ å¯ä»¥åContainer.DataItemï¼è¿ä¸ªå±æ§è¿åçæ¯ä½ æ£å¨è¢«ç»å®çæ°æ®æºä¸çé£ä¸ªæ°æ®é¡¹ãå¦æä½ çæ°æ®æºæ¯DataTableï¼åè¿ä¸ªæ°æ®é¡¹çç±»åå®é æ¯DataRowViewã
Spring MVC组件之HandlerAdapter
HandlerAdapter组件概述:HandlerAdapter组件在Spring MVC框架中作为处理器Handler的适配器,主要职责是源码适配特定的Handler以处理相应的请求。在源码中,源码HandlerAdapter接口定义了三个核心方法:判断HandlerAdapter组件是源码否支持特定handler实例的`supports`方法、使用handler实例处理具体请求的源码`handle`方法、获取资源最后修改值的源码漫画脸生成小程序源码`getLastModified`方法(已被废弃)。
HandlerAdapter类图展示了继承结构,源码HandlerAdapter接口由多个具体实现类继承,源码如HandlerFunctionAdapter、源码HttpRequestHandlerAdapter、源码SimpleControllerHandlerAdapter、源码SimpleServletHandlerAdapter等,源码其中RequestMappingHandlerAdapter的源码Pollfish源码继承关系稍微复杂一些。AbstractHandlerMethodAdapter作为HandlerAdapter的源码抽象子类,提供了`supports`、源码`handle`、`getLastModified`方法的虚实现。
RequestMappingHandlerAdapter在初始化时默认由Spring MVC容器处理,继承自AbstractHandlerMethodAdapter,sqlapi 源码并实现了InitializingBean和BeanFactoryAware接口,提供初始化方法处理控制器和处理逻辑的注入。
在RequestMappingHandlerAdapter的初始化过程中,它执行了几个关键操作:初始化RequestMappingHandlerAdapter类中的`initBinderAdviceCache`、`modelAttributeAdviceCache`、`requestResponseBodyAdvice`属性,flappybird 源码通过扫描带有@ControllerAdvice注解的bean来实现控制器的注解和方法的管理。此外,它还初始化了`argumentResolvers`、`initBinderArgumentResolvers`和`returnValueHandlers`属性,分别用于参数解析、初始化参数绑定和返回值处理。ccproxy 源码
RequestMappingHandlerAdapter重写了AbstractHandlerMethodAdapter提供的三个模板方法:在`supportsInternal`方法中直接返回`true`,在`getLastModifiedInternal`方法中返回`-1`,而在`handleInternal`方法中执行处理请求的关键逻辑。处理流程大致包括准备请求参数、使用处理器处理请求和将不同类型的返回值统一为ModelAndView。
在处理请求的逻辑中,RequestMappingHandlerAdapter通过调用checkRequest方法检查请求是否符合预期,并通过invokeHandlerMethod方法执行实际的请求处理,此过程中创建了ServletWebRequest、WebDataBinderFactory和ModelFactory实例,最终通过调用ServletInvocableHandlerMethod的invokeAndHandle方法实现请求处理。
WebDataBinderFactory类用于创建DataBinder对象,主要负责参数绑定,实现了参数与String之间的类型转换,ArgumentResolver在参数解析过程中会使用WebDataBinder。ModelFactory类用于维护Model,初始化和更新Model,提供了初始化和更新Model的逻辑。
Spring MVC组件中的各个HandlerAdapter类和相关实现通过一系列的接口、抽象类和具体类的继承和实现,构建了一个灵活且可扩展的框架,用于处理HTTP请求并返回响应,支持注解驱动的控制器、参数解析、返回值处理等关键功能,形成了高效、灵活的Web应用开发基础。
Evalï¼ï¼åBindï¼ï¼çåºå«
Eval(
"
")åBind(
"
")ãè¿ä¸¤ç§ä¸ä¸ªååç»å®ï¼ä¸ä¸ªååç»å®
bindæ¯ååç»å®,ä½éæ°æ®æºå¯æ´æ¹æè½ç¨
ASP.NET
2.0æ¹åäºæ¨¡æ¿ä¸çæ°æ®ç»å®æä½ï¼æv1.xä¸çæ°æ®ç»å®è¯æ³DataBinder.Eval(Container.DataItem,
fieldname)ç®å为Eval(fieldname)ãEvalæ¹æ³ä¸DataBinder.Evalä¸æ ·å¯ä»¥æ¥åä¸ä¸ªå¯éçæ ¼å¼åå符串åæ°ã缩ççEvalè¯æ³ä¸DataBinder.Evalçä¸åç¹å¨äºï¼Evalä¼æ ¹æ®æè¿ç容å¨å¯¹è±¡ï¼ä¾å¦DataListItemï¼çDataItemå±æ§æ¥èªå¨å°è§£æå段ï¼èDataBinder.Evaléè¦ä½¿ç¨åæ°æ¥æå®å®¹å¨ãç±äºè¿ä¸ªåå ï¼Evalåªè½å¨æ°æ®ç»å®æ§ä»¶ç模æ¿ä¸ä½¿ç¨ï¼èä¸è½ç¨äºPageï¼é¡µé¢ï¼å±ãå½ç¶ï¼ASP.NET
2.0页é¢ä¸ä»ç¶æ¯æDataBinder.Evalï¼ä½ å¯ä»¥å¨ä¸æ¯æç®åçEvalè¯æ³çç¯å¢ä¸ä½¿ç¨å®ã
ä¸é¢çä¾åæ¼ç¤ºäºå¦ä½ä½¿ç¨æ°çç®åçEvalæ°æ®ç»å®è¯æ³ç»å®å°DataListæ°æ®é¡¹æ¨¡æ¿ï¼ItemTemplateï¼ä¸çImageãLabelåHyperLinkæ§ä»¶ã
ï¼asp:DataList
ID=
"DataList1
"
RepeatColumns=
"5
"
Width=
"
"
runat=
"server
"
DataSourceID=
"ObjectDataSource1
"ï¼
ãï¼ItemTemplateï¼
ããï¼asp:HyperLink
ID=
"HyperLink1
"
runat=
"server
"
NavigateUrl=
'ï¼%#
Eval(
"PhotoID
",
"PhotoFormViewPlain.aspx?ID={ 0}
")
%ï¼
'ï¼
ããï¼asp:Image
ID=
"Image1
"
Runat=
"server
"
ImageUrl=
'ï¼%#
Eval(
"FileName
",
"images/thumbs/{ 0}
")
%ï¼
'
/ï¼ï¼/asp:HyperLinkï¼
ããï¼asp:Label
ID=
"CaptionLabel
"
runat=
"server
"
Text=
'ï¼%#
Eval(
"Caption
")
%ï¼
'
/ï¼
ãï¼/ItemTemplateï¼
ï¼/asp:DataListï¼ï¼br
/ï¼
ï¼asp:ObjectDataSource
ID=
"ObjectDataSource1
"
runat=
"server
"
TypeName=
"DataComponentTableAdapters.PhotosTableAdapter
"
SelectMethod=
"GetPhotosForAlbum
"ï¼
ããæ°æ®ç»å®ä¹å¯ä»¥ä½ä¸ºæ§ä»¶ç主é¢å®ä¹ï¼theme
definitionï¼çä¸é¨åï¼è¿æ ·æ们就å¯ä»¥éè¿æ¹å主é¢æ¥éæå°æ¹å模æ¿åæ§ä»¶çå¸å±åå¤è§ãä½æ¯Themeï¼ä¸»é¢ï¼æ¨¡æ¿ä¸åªè½ä½¿ç¨Evalï¼æè åé¢è®¨è®ºçBindï¼ãç»å®å°ä»»æçç¨æ·ä»£ç æ¯è¢«ç¦æ¢çã
--------å ³æ³¨ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
常è§ç»å®æ ¼å¼ï¼ä¸è¿ä»ä»¬çæ§è½æåºå«ã
<%#
DataBinder.Eval(Container.DataItem,
"[n]")
%>
<%#
DataBinder.Eval(Container.DataItem,
"ColumnName")
%>
<%#
DataBinder.Eval(Container.DataItem,
"ColumnName",
null)
%>
<%#
DataBinder.Eval(Container,
"DataItem.ColumnName",
null)
%>
<%#
((DataRowView)Container.DataItem)["ColumnName"]
%>
<%#
((DataRowView)Container.DataItem).Row["ColumnName"]
%>
<%#
((DataRowView)Container.DataItem)["adtitle"]
%>
<%#
((DataRowView)Container.DataItem)[n]
%>
<%#
((DbDataRecord)Container.DataItem)[0]
%>
<%#
(((èªå®ä¹ç±»å)Container.DataItem)).å±æ§.ToString()
%>ï¼å¦æå±æ§ä¸ºå符串类åå°±ä¸ç¨ToString()äºï¼
ä¸é¢è¿ä¸ä¸ªæ§è½æ好ã
//æ¾ç¤ºäºä½å°æ°
//<%#
DataBinder.Eval(Container.DataItem,
"UnitPrice",
"${ 0:F2}")
%>
//{ 0:G}代表æ¾ç¤ºTrueæFalse
//
//
<asp:Image
Width=""
Height=""
Border="0"
runat="server"
//
AlternateText='<%#
DataBinder.Eval(Container.DataItem,
"Discontinued",
"{ 0:G}")
%>'
//
ImageUrl='<%#
DataBinder.Eval(Container.DataItem,
"Discontinued",
"~/images/{ 0:G}.gif")
%>'
/>
//
//转æ¢ç±»å
((string)DataBinder.Eval(Container,
"DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
{ 0:d}
æ¥æåªæ¾ç¤ºå¹´ææ¥
{ 0:yyyy-mm-dd}
ææ ¼å¼æ¾ç¤ºå¹´ææ¥
{ 0:c}
è´§å¸æ ·å¼
---------------------------------------------------------
å¨æ¬ç« åé¢ï¼æ们å¨æ¨¡æ¿ä¸ä¸æä¸éå°è¿è¡¨è¾¾å¼ä»¥åEvalæ¹æ³ãEvalæ¹æ³æ¯ä¸ç§å®å¶è¿ç®ç¬¦ï¼å¨æ°æ®ç»å®è¡¨è¾¾å¼ç¨æ¥æ¹æ³æç»å®çæ°æ®é¡¹ä¸çå ¬å ±å±æ§ãåææç¨çEvalæ¹æ³æ¯ä¸ä¸ªASP.NET
2.0ææ¯æçç¹å¾ï¼å¦æå¨ASP.NET
1.xåºç¨ç¨åºä¸ä½¿ç¨ï¼åä¼äº§çä¸ä¸ªç¼è¯é误ã对äºASP.NETçææçæ¬ï¼æ们å¯ä»¥ä½¿ç¨ä¸ä¸ªå¨åè½ä¸ç¸å½çæ¹æ³ï¼è¯¥æ¹æ³ä¹ç§°ä¸ºEvalï¼ä½æ¯æ¥èªå¦ä¸ä¸ªç±»ââDataBinderã
éè¦æ示ï¼
éè¿Evalæ¹æ³(尽管å®æ¥èªDataBinderæPageç±»)ï¼å¯ä»¥è®¿é®æç»å®çæ°æ®é¡¹ä¸çå ¬å ±å±æ§ã让ææ¾æ¸ ä¸ä¸å ¬å ±å±æ§å¨è¯¥ä¸ä¸æä¸æä»ä¹ï¼ä»¥å为ä»ä¹æåææå®ä»¬å«åå±æ§ãä»»ä½ä¸ä¸ªå®ç°äºIEnumerableæ¥å£çç±»é½å¯ä»¥ç»å®å°ä¸ä¸ªæ§ä»¶ãå®é çç±»å表å½ç¶å æ¬DataTable(å ¶ä¸ä¸ä¸ªæ°æ®é¡¹å¨é»è¾ä¸å¯¹åºäºè¡¨è®°å½)ï¼ä½æ¯å®è¿å æ¬å®å¶éå(å ¶ä¸ä¸ä¸ªæ°æ®é¡¹å¯¹åºäºç»å®ç±»çä¸ä¸ªå®ä¾ã)Evalæ¹æ³æç»ä¼æ¥è¯¢è¯¥æ°æ®é¡¹å¯¹è±¡ä»¥å¾å°å®çå±æ§éã表示ä¸ä¸ªè¡¨è®°å½ç对象å°è¿åå®çåæ述符ï¼å ¶ä»å¯¹è±¡å°è¿åå®ä»¬çå ¬å ±å±æ§éã
DataBinderç±»æ¯ææ°æ®ç»å®è¡¨è¾¾å¼ççæå解æãå®çéæéè½½æ¹æ³Evalç¹å«éè¦ã该æ¹æ³ä½¿ç¨åå°æºå¶æ¥è§£æå计ç®ä¸ä¸ªè¿è¡æ¶å¯¹è±¡ç表达å¼ãEvalæ¹æ³ç客æ·å æ¬RADå·¥å ·ï¼è¯¸å¦Microsoft
Visual
Studio
.NET设计å¨åWebæ§ä»¶ï¼å®ä»¬ä»¥å£°æçæ¹å¼è°ç¨è¯¥æ¹æ³ç¨å¨ææ¹åçå¼å¡«å è¿äºå±æ§ã
1.
Evalæ¹æ³
DataBinder.Evalæ¹æ³çè¯æ³å¦ä¸ï¼
<%#
DataBinder.Eval(Container.DataItem,
expression)
%>
ä¸è¿°ä»£ç çæä¸çç¥äºç¬¬3个å¯éåæ°ã该åæ°æ¯ä¸ä¸ªå符串ï¼å å«æç»å®å¼çæ ¼å¼éæ©ãContainer.DataItem表达å¼å¼ç¨å¯¹è¯¥è¡¨è¾¾å¼è¿è¡è®¡ç®ç对象ã该表达å¼é常æ¯ä¸ä¸ªå符串ï¼è¡¨ç¤ºæ°æ®é¡¹å¯¹è±¡ä¸è¦è®¿é®çå段çå称ãå®å¯ä»¥æ¯ä¸ä¸ªå æ¬ç´¢å¼åå±æ§åç表达å¼ãDataItemå±æ§è¡¨ç¤ºå½å容å¨ä¸ä¸æä¸ç对象ã容å¨é常å³å°çæç该æ°æ®é¡¹å¯¹è±¡(ä¾å¦ï¼DataGridItem对象)çå½åå®ä¾ã
åé¢æ示ç代ç é常éå¤åºç°ï¼èä¸ä»¥ç¸åçå½¢å¼ãåªæ表达å¼åæ ¼å¼å符串å¨é¡µä¸é¡µä¹é´ä¼ææååã
2.
æ´ç®æ´çEval
DataBinder.Evalçåå§è¯æ³å¨ASP.NET
2.0ä¸å¯ä»¥è¢«ç®åï¼è¿ä¸ç¹æ们å¨åé¢çRepeater示ä¾ä¸å·²ç»çå°ãå¨ASP.NET
2.0ä¸ï¼åªè¦å¨ASP.NET
1.xä¸æ¥åå¦ä¸è¡¨è¾¾å¼çå°æ¹ï¼
<%#
DataBinder.Eval(Container.DataItem,
expression)
%>
å°±å¯ä»¥ä½¿ç¨ï¼
<%#
Eval(expression)
%>
ä¸ç¨è¯´ï¼ASP.NET
2.0ä¹æ¯å®å ¨æ¯æDataBinder对象çã
å¨<%#
...
%>çå®ç¬¦å åºç°çä»»ä½ä»£ç ï¼é½ä¼å¾å°ASP.NETè¿è¡åºçç¹æ®å¤çã让æ们ç®ååæä¸ä¸è¯¥ä»£ç ä¼åçä»ä¹ãç¼è¯è¯¥é¡µé¢æ¶ï¼Evalè°ç¨ä½ä¸ºä¸ä¸ªç¬ç«çè°ç¨æå ¥è¯¥é¡µé¢çæºä»£ç ä¸ãå¦ä¸ä»£ç 说æäºä¼åçä»ä¹ï¼
object
o
=
Eval("lastname");
string
result
=
Convert.ToString(o);
该è°ç¨çç»æ被转æ¢ä¸ºä¸ä¸ªå符串ï¼å¹¶ä»ç»ä¸ä¸ªæ°æ®ç»å®çæåæ§ä»¶ââDataBoundLiteralControlç±»çä¸ä¸ªå®ä¾ãç¶èææ°æ®ç»å®çæåæå ¥è¯¥é¡µçæ§ä»¶æ ä¸ã
å¨ASP.NET
2.0ä¸ï¼TemplateControlç±»(Pageçç¶ç±»)å®é ä¸æ°å¢äºä¸ä¸ªå为Evalçåä¿æ¤ç(ä½ä¸æ¯èæç)æ¹æ³ãå¦ä¸ä¼ªä»£ç 说æ该æ¹æ³çå·¥ä½æºå¶ï¼
protected
object
Eval(string
expression)
{
if
(Page
==
null)
throw
new
InvalidOperationException(â¦);
return
DataBinder.Eval(Page.GetDataItem(),
expression);
}
æ£å¦æ们å¯ä»¥çå°çï¼Evalæ¯å»ºç«å¨DataBinder.Evalæ¹æ³ä¹ä¸çä¸ä¸ªç®åå è£ ãDataBinder.Evalæ¹æ³ä½¿ç¨å½å容å¨çæ°æ®é¡¹è°ç¨ãé常ææ¾ï¼å½å容å¨çæ°æ®å¨æ°æ®ç»å®æä½ä¹å¤ä¸ºnullââå³ï¼å¨è°ç¨DataBindä¹åçè°ç¨æ ä¸ãè¿ä¸äºå®å¼èµ·äºEvalåDataBinder.Evalä¹é´çä¸ä¸ªå ³é®åºå«ã
éè¦æ示ï¼
TemplateControlçEvalæ¯ä¸ä¸ªæ°æ®ç»å®æ¹æ³ï¼å¨ä¸ä¸ªæ°æ®ç»å®æä½ä¸åªè½å¨ä¸ä¸ªæ°æ®ç»å®æ§ä»¶çä¸ä¸æä¸ä½¿ç¨ãç¸åï¼DataBinder.Evalæ¯ä¸ä¸ªå®å ¨æççæ¹æ³ï¼å¯ä»¥å¨ç¨åºä¸çä»»ä½å°æ¹ä½¿ç¨ãæ们é常å¨å®å¶çæ°æ®ç»å®æ§ä»¶çå®ç°ä¸ä½¿ç¨å®ãæå°å¨æ¬ä¹¦çå§å¦¹ç¯ãProgramming
Microsoft
ASP.NET
2.0
Applications:
Advanced
Topics
ãä¸ä»ç»å®ã
3.
è·å¾é»è®¤çæ°æ®é¡¹
åé¢ç»åºç说æ页é¢çEvalæ¹æ³çè¡ä¸ºç伪ç ï¼å±ç¤ºäºPageç±»çGetDataItemæ¹æ³ãå®æ¯ä»ä¹ï¼å¦åæè¿°ï¼è¿ä¸ç®åè¯æ³éç¨ä¸ä¸ªé»è®¤çContainer.DataItemä¸ä¸æ对象ãGetDataItemåªä¸è¿æ¯è¿å该对象çå½æ°ã
æ´ç²¾ç¡®å°è®²ï¼GetDataItemæ¯è·è¸ªé¡µé¢çå½åç»å®ä¸ä¸æçåºäºæ çæºå¶çç»ç¹ã该æ§ä»¶æ ä¸çæ¯ä¸ªæ§ä»¶å¨è°ç¨åDataBindæ¹æ³æ¶åå ¥è¯¥æ ä¸ãDataBindæ¹æ³è¿åæ¶ï¼æ§ä»¶ä»è¯¥æ ä¸å¼¹åºãå¦ææ æ¯ç©ºçï¼å¹¶ä¸ä¼å¾ä»¥ç¼ç¨çæ¹å¼è°ç¨Evalæ¹æ³ï¼åGetDataItemæåºä¸ä¸ªæ æçæä½å¼å¸¸ãæ»ä¹ï¼æ们åªè½å¨æ¨¡æ¿ä¸ä½¿ç¨Evalç®åæä½ï¼å¦æéè¦å¨ä»£ç ä¸çä»»ä½å ¶ä»å°æ¹è®¿é®ä¸ä¸ªæ°æ®é¡¹çå±æ§ï¼åå©ç¨DataBinder.Evalæ¹æ³ï¼å¹¶æ¾å¼å°æåºæ°æ®é¡¹å¯¹è±¡ã
æ示
å¦åæè¿°ï¼é常åªæå¨å®å¶çæ°æ®ç»å®æ§ä»¶ç代ç ä¸æéè¦ç´æ¥è°ç¨DataBinder.Evalæ¹æ³ã(æå¨Programming
Microsoft
ASP.NET
2.0
Applications:
Advanced
Topicsä¸ä»ç»äºå®å¶æ§ä»¶ã)ç¶èï¼å¦æåçè¿ç§æ åµï¼å¯è½éè¦éè¿è°ç¨DataBinder.GetPropertyValueæ¹æ³æ¥ä¿åå 个å é¨è°ç¨åCPUå¨æãæç»ï¼è¿å®å ¨æ¯ç±DataBinder.Evalå®æçã
å ³äº.netä¸çrepeater
repeater使ç¨çæ¹æ³è·datalistå·®ä¸å¤çï¼
ç®å示èä¸ä¸ªï¼
<asp:Repeater id="Repeater_Test" runat="server">
<HeaderTemplate>UserID UserName UserPWD</HeaderTemplate>
<ItemTemplate>
<br /><%#DataBinder.Eval(Container.DataItem,"userID") %>
<%#DataBinder.Eval(Container.DataItem,"username") %>
<%#DataBinder.Eval(Container.DataItem,"password") %>
</ItemTemplate>
</asp:Repeater>
---------------以ä¸æ¯Default.aspxæºç å¤--------
private DataTable DataTableToRepeater()
{
//èªå·±çæä¸ä¸ªDataTableç»Repeapterå½ä½æ°æ®æº
DataTable dt = new DataTable();
dt.Columns.Add("userID");
dt.Columns.Add("username");
dt.Columns.Add("password");
for (int i = 1; i < ; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i;
dr[1] = "User" + i.ToString();
dr[2] = "PWD" + i.ToString();
dt.Rows.Add(dr);
}
return dt;
}
--------------为äºæ¹ä¾¿è°ç¨ï¼ç¹æåäºä¸ä¸ªDataTable---------
çªä½å è½½æ¶
if (!IsPostBack)
{
Repeater_Test.DataSource = DataTableToRepeater();
Repeater_Test.DataBind();
}
-----------------çªä½å è½½------------------
UserID UserName UserPWD
1 User1 PWD1
2 User2 PWD2
3 User3 PWD3
4 User4 PWD4
5 User5 PWD5
6 User6 PWD6
7 User7 PWD7
8 User8 PWD8
9 User9 PWD9
-----------ç»æåºè¯¥æ¯è¿æ ·ç-----------
2024-12-29 00:32
2024-12-29 00:09
2024-12-28 23:02
2024-12-28 22:47
2024-12-28 22:06