困惑:刚学ASP.NET就碰到这个问题,想了N久未能搞掂,各位高手帮忙看看....
照着书上的示例做了如下的ASP.NET程序:
<%@ Import namespace="System.Data" %>
<html>
<head>
<script language="C#" runat="server">
void Page_Load(Object Src,EventArgs E)
{
if (!Page.IsPostBack)
{
DataTable dt=new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue",typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue",typeof(String)));
dt.Columns.Add(new DataColumn("DateTimeValue",typeof(DateTime)));
dt.Columns.Add(new DataColumn("BooleanValue",typeof(bool)));
for(int i=1;i<=9;i++)
{
dr=dt.NewRow();
dr[0]=i;
dr[1]="No."+i.ToString();
dr[2]=DateTime.Now;
dr[3]=(i%2!=0)?true:false;
dt.Rows.Add(dr);
}
DataList1.DataSource=new DataView(dt);
DataList1.DataBind();
}
}
</script>
</head>
<body>
<center>
<h3><font face="Verdana">绑定到DataView</font></h3>
<form runat=server>
<asp:DataList id="DataList1" runat="server"
RepeatColumns="3"
Width="80%"
BorderColor="red"
BackColor="gray"
BorderWidth="8"
GridLines="Both"
CellPadding="8"
CellSpacing="8"
/>
<itemtemplate name="ItemTemplate">
定购日期:<%# DataBinder.Eval(Container.DataItem,"DateTimeValue","{0:d}") %>
<p>
数量:<%# DataBinder.Eval(Container.DataItem,"IntegerValue","{0:N2}")%>
<p>
项:<%# DataBinder.Eval(Container.DataItem,"StringValue")%>
定购日期:<asp:CheckBox id=chk1 Checked='<%# (bool)DataBinder.Eval(Container.DataItem,"BoolValue")%>' runat=server/>
<p>
</itemtemplate>
</asp:Datalist
</form>
</center>
</body>
</html>
执行如下代码后会出现以下错误:
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。
编译器错误信息: CS0117: “System.Web.UI.Control”并不包含对“DataItem”的定义
源错误:
行 46: />
行 47: <itemtemplate name="ItemTemplate">
行 48: 定购日期:<%# DataBinder.Eval(Container.DataItem,"DateTimeValue","{0:d}") %>
行 49: <p>
行 50: 数量:<%# DataBinder.Eval(Container.DataItem,"IntegerValue","{0:N2}")%>
源文件: d:\inetpub\wwwroot\test1\databind7.aspx 行: 48
出错行就在第48行,到底是怎么一回事呢??各位高手请帮忙解决一下!
问题点数:50、回复次数:8Top
1 楼freecs(北狼)回复于 2003-10-02 13:45:25 得分 0
引入System.ComponentModel 命名空间
using System.ComponentModelTop
2 楼freecs(北狼)回复于 2003-10-02 13:46:19 得分 0
对了,建议你将后台类文件和Html 分开写Top
3 楼freexin(小昕)回复于 2003-10-02 13:52:47 得分 0
估计是没有预先定义DataList1
<script language="C#" runat="server">
protected DataList DataList1;//增加一行
void Page_Load(Object Src,EventArgs E)
{
......
因为是延迟绑定。而你在运行Page_Load时已经绑定了,所以找不到Container.DataItem
也可以把
<asp:CheckBox id=chk1 Checked='<%# (bool)DataBinder.Eval(Container.DataItem,"BoolValue")%>' runat=server/>
修改为不用<asp:控件,直接使用<input>的HTML控件就没有问题了,在DataList模板内使用了asp控件,如:<asp:CheckBox>内部属性就不能使用延迟绑定<%# %>的方式
Top
4 楼qiuji(忆秋季)回复于 2003-10-02 13:59:04 得分 0
<%@ Import namespace="System.ComponentModel" %>
Top
5 楼kysyuan(迈伯乐)回复于 2003-10-02 14:04:48 得分 25
代码如果是这样子就对了,不信你试一试,你在DataList控件中提前结束:
<%@ Import namespace="System.Data" %>
<HTML>
<HEAD>
<script language="C#" runat="server">
void Page_Load(Object Src,EventArgs E)
{
if (!Page.IsPostBack)
{
DataTable dt=new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue",typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue",typeof(String)));
dt.Columns.Add(new DataColumn("DateTimeValue",typeof(DateTime)));
dt.Columns.Add(new DataColumn("BooleanValue",typeof(bool)));
for(int i=1;i<=9;i++)
{
dr=dt.NewRow();
dr[0]=i;
dr[1]="No."+i.ToString();
dr[2]=DateTime.Now;
dr[3]=(i%2!=0)?true:false;
dt.Rows.Add(dr);
}
DataList1.DataSource=new DataView(dt);
DataList1.DataBind();
}
}
</script>
</HEAD>
<body>
<center>
<h3><font face="Verdana">绑定到DataView</font></h3>
<form runat="server" ID="Form1">
<asp:DataList id="DataList1" runat="server" RepeatColumns="3" Width="80%" BorderColor="red" BackColor="gray" BorderWidth="8" GridLines="Both" CellPadding="8" CellSpacing="8" >
<ITEMTEMPLATE name="ItemTemplate">定购日期:<%# DataBinder.Eval(Container.DataItem,"DateTimeValue","{0:d}") %>
数量:<%# DataBinder.Eval(Container.DataItem,"IntegerValue","{0:N2}")%>
<br>项:<%# DataBinder.Eval(Container.DataItem,"StringValue")%>
定购日期:
<asp:CheckBox id=chk1 runat="server" Checked='<%# (bool)DataBinder.Eval(Container.DataItem,"BooleanValue")%>'>
</asp:CheckBox>
<P></ITEMTEMPLATE>
</asp:DataList>
</center>
</P></FORM>
<CENTER></CENTER>
</body>
</HTML>
Top
6 楼DreamMeng( 追梦 )回复于 2003-10-02 14:07:04 得分 0
upTop
7 楼kysyuan(迈伯乐)回复于 2003-10-02 14:08:16 得分 0
也就是去掉
<asp:DataList id="DataList1" runat="server"
RepeatColumns="3"
Width="80%"
BorderColor="red"
BackColor="gray"
BorderWidth="8"
GridLines="Both"
CellPadding="8"
CellSpacing="8"
/>
最后的那个“/”还有你的程序里面将BooleanValue写成BoolValue也是一大错误!
如果 改正以上两个错误还是可以运行的Top
8 楼qiuji(忆秋季)回复于 2003-10-02 14:19:36 得分 25
<asp:DataList id="DataList1" runat="server"
RepeatColumns="3"
Width="80%"
BorderColor="red"
BackColor="gray"
BorderWidth="8"
GridLines="Both"
CellPadding="8"
CellSpacing="8"
/>
去掉/,因为<%# DataBinder.Eval(Container.DataItem,"DateTimeValue","{0:d}") %>要绑定数据,而你把值绑定到了DataList,但是由于<asp:DataList ..../>已经结束了,所以后面的代码就不在DataList中了。
还有:</asp:Datalist 少了一个“>”。Top



