DataItem的疑惑

freshman1 2006-10-22 08:55:46
下面有一段是有关datagrid的具体代码如下
datagrid.aspx:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<title>Sample ASP.NET Page</title>
<body>
<script language="vb" runat="server">
Sub Page_Load(sender As Object,e As EventArgs)
Dim ConnStr as String
ConnStr="Data Source=localhost;User ID=sa;Password=99103453;Initial Catalog=pubs"
Dim conn as SqlConnection=New SqlConnection(ConnStr)
Try
conn.Open()
Dim da as SqlDataAdapter=New SqlDataAdapter("select * from authors",conn)
Dim ds As New DataSet
da.Fill(ds,"authors")
Dim dv1 as New DataView(ds.Tables("authors"))
dv1.Sort="au_fname,au_lname Desc"
DataGrid1.DataSource=dv1
DataGrid1.DataBind()
Catch ex As SqlException
Status.Text=ex.Message
Finally
conn.Close()
End Try
end Sub
Sub Edit_Grid(sender As Object,e As DataGridCommandEventArgs)
DataGrid1.EditItemIndex=e.Item.ItemIndex
DataGrid1.DataBind()
end Sub
Sub Cancel_Grid(sender As Object,e As DataGridCommandEventArgs)

end Sub
Sub Update_Grid(sender As Object,e As DataGridCommandEventArgs)

end Sub

</script>
<h1>DataView object and data binding</h1>
<form runat="server">
<asp:label id="Status" runat="server" /><br>
<asp:datagrid id="DataGrid1" runat="server"
AutoGenerateColumns="false"
DatakeyFiled="au_id"
OnEditCommand="Edit_Grid"
OnCancelCommand="Cancel_Grid"
OnUpdateCommand="Update_Grid"
BackColor="lightgreen"
GridLines="none"
Font-Name="Arial"
Font-Size="10pt"
HeaderStyle-BackColor="gray"
MaintainState="false"
ShowFooter="false" />
<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" />
<asp:TemplateColumn HeaderText="ID">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="au_id" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Last Name">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"au_lname") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="au_lname" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"au_lname") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="First Name">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"au_fname") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="au_fname" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"au_fname") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Phone">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"phone") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="phone" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"phone") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Address">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"address") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="address" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"address") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="City">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"city") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="city" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"city") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="State">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"state") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="state" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"state") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Zip">
<ItemTemplate>
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"zip") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox width="100" id="zip" ReadOnly="true" text='<%# DataBinder.Eval(Container.DataItem,"zip") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Contract?">
<ItemTemplate>
<asp:checkbox Enabled="false" Checked='<%# DataBinder.Eval(Container.DataItem,"contract") %>' runat="server" />
</ItemTemplate>
<ItemTemplate>
<asp:checkbox Enabled="true" Checked='<%# DataBinder.Eval(Container.DataItem,"contract") %>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
在datagrid这段代码运行编译报错
编译器错误信息: BC30456: “DataItem”不是“System.Web.UI.Page”的成员。
源错误:
行 56: <asp:TemplateColumn HeaderText="ID">
行 57: <ItemTemplate>
行 58: <asp:label Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>' runat="server" />
行 59: </ItemTemplate>
行 60: <EditItemTemplate>

源文件: c:\inetpub\wwwroot\aspnet\610.aspx 行: 58
请各位高人指点一下,附我的操作系统是xp sp2,.net的版本信息如下:
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.210
...全文
201 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
freshman1 2006-10-24
  • 打赏
  • 举报
回复
ok,问题解决了,多谢各位了,除了'<%# DataBinder.Eval(Container.DataItem,"au_id") %>'换成是'<%# Eval("au_id") %>'但还是有个地方有错误
<asp:datagrid id="DataGrid1" runat="server"
AutoGenerateColumns="false"
DatakeyFiled="au_id"
OnEditCommand="Edit_Grid"
OnCancelCommand="Cancel_Grid"
OnUpdateCommand="Update_Grid"
BackColor="lightgreen"
GridLines="none"
Font-Name="Arial"
Font-Size="10pt"
HeaderStyle-BackColor="gray"
MaintainState="false"
ShowFooter="false" />

'>'之前的'/'是多余的,否则数据就无法显示了。

daishengs 2006-10-24
  • 打赏
  • 举报
回复
'<%# DataBinder.Eval(Container.DataItem,"au_id") %>' 之类的
换成
'<%# Eval(au_id") %>' 就行了

我昨天看了一下2.0里微软的datalist例子,它的绑定语句还真是'<%# DataBinder.Eval(Container.DataItem,"au_id") %>'这样的,DataGrid的是'<%# Eval(au_id") %>'这样的。
hy_lihuan 2006-10-23
  • 打赏
  • 举报
回复
学习了
freshman1 2006-10-23
  • 打赏
  • 举报
回复
我是个初学者,希望能给出完整的代码
daishengs 2006-10-23
  • 打赏
  • 举报
回复
如果是2.0的,微软是建议用这样的方式,Text='<%# Eval("ProductName") %>'。

<%# DataBinder.Eval(Container.DataItem,"StringValue1") %>
这样的方式只能说是有可能出错。
freshman1 2006-10-23
  • 打赏
  • 举报
回复
是的,2.0和1.0肯定有区别,但是请看下面一段代码
datalist.aspx
<%@ Import Namespace="System.Data" %>
<html>
<title>Using DataList</title>
<script language="VB" runat="server">
Function CreateDataSource() As ICollection
Dim dt As DataTable
Dim dr As DataRow
dt=new DataTable()
dt.Columns.Add(new DataColumn("StringValue1",System.Type.GetType("System.String")))
Dim i As Integer
For i=0 To 9
dr=dt.NewRow()
dr(0)="Item " & i
dt.Rows.Add(dr)
next i

Dim dv As DataView
dv=new DataView(dt)
CreateDataSource=dv
End Function

Sub Page_Load(sender As Object,e As EventArgs)
if not IsPostBack
'need to load this data only once
DataList1.DataSource=CreateDataSource()
DataList1.DataBind()
end if
End Sub

Sub Button1_Click(sender As Object,e As EventArgs)
if DropDown1.SelectedIndex=0 then
DataList1.RepeatDirection=RepeatDirection.Horizontal
else
DataList1.RepeatDirection=RepeatDirection.Vertical
end if

if DropDown2.SelectedIndex=0 then
DataList1.RepeatLayout=RepeatLayout.Table
else
DataList1.RepeatLayout=RepeatLayout.Flow
end if

DataList1.RepeatColumns=DropDown3.SelectedIndex+1

if Check1.Checked and DataList1.RepeatLayout=RepeatLayout.Table then
DataList1.BorderWidth=Unit.Pixel(1)
DataList1.GridLines=GridLines.Both
else
DataList1.BorderWidth=Unit.Pixel(0)
DataList1.GridLines=GridLines.None
end if
End Sub
</script>
<body>
<center>
<form runat="server">
<asp:DataList id="DataList1" runat="server"
BorderColor="black"
CellPadding="3"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#6F6F6"
AlternatingItemStyle-BackColor="#6F6F6">
<HeaderTemplate>
Items
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"StringValue1") %>
</ItemTemplate>
</asp:DataList>
<p>
<hr noshade align="left" width="300px">
RepeatDirection:
<asp:DropDownList id="DropDown1" runat="server">
<asp:ListItem>Horizontal</asp:ListItem>
<asp:ListItem>Vertical</asp:ListItem>
</asp:DropDownList><br>
RepeatLayout:
<asp:DropDownList id="DropDown2" runat="server">
<asp:ListItem>Table</asp:ListItem>
<asp:ListItem>Flow</asp:ListItem>
</asp:DropDownList><br>
RepeatColumns:
<asp:DropDownList id="DropDown3" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
</asp:DropDownList><br>
Show Borders:
<asp:CheckBox id="Check1" runat="server" /><p>
<asp:Button id="Button1" runat="server" Text="Refresh DataList" OnClick="Button1_Click" />
</form>
</center>
</body>
</html>

其中<%# DataBinder.Eval(Container.DataItem,"StringValue1") %>与前面那个代码并没有很大的区别,但是在同样的环境可以正常运行,唯一的区别是前面的代码数据是连的sql,并且使用的是datagrid控件,而这个代码的数据是函数CreateDataSource里初始化的,用的是datalist控件,请问可以指出其中的区别吗,谢谢
njrc 2006-10-22
  • 打赏
  • 举报
回复
2楼正解
jimu8130 2006-10-22
  • 打赏
  • 举报
回复
asp.net 2.0和1。1 有区别的
jimu8130 2006-10-22
  • 打赏
  • 举报
回复
你怎么用的是2。0了?
2。0的语法好像不同了你得这样绑定了
Text='<%# Eval("字段名") %>'
<asp:label Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>' runat="server" />
------》
<asp:label Text='<%# Eval(“au_id") %>' runat="server" />

发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-10-22 08:55
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。