“Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。”的错误
如何解决这个问题,结合http://www.webswapp.com/codesamples/aspnet20/dependentlists/default.aspx的资料,希望能给刚开始使用的朋友一些帮助。
<
asp:UpdatePanel ID
=
"
UpdatePanel1
"
runat
=
"
server
"
UpdateMode
=
"
Conditional
"
>
< ContentTemplate >
< asp:ListView ID = " ListView1 " runat = " server " DataKeyNames = " UserID " DataSourceID = " SqlDataSource1 "
InsertItemPosition = " LastItem " OnItemUpdating = " ListView1_ItemUpdating "
oniteminserting = " ListView1_ItemInserting " >
< AlternatingItemTemplate >
< tr style = " background-color: #FAFAD2; color: #284775; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ AlternatingItemTemplate >
< LayoutTemplate >
< table runat = " server " >
< tr runat = " server " >
< td runat = " server " >
< table id = " itemPlaceholderContainer " runat = " server " border = " 1 " style = " background-color: #FFFFFF;
border - collapse: collapse; border - color: # 999999 ; border - style: none; border - width: 1px;
font - family: Verdana, Arial, Helvetica, sans - serif; " >
< tr runat = " server " style = " background-color: #FFFBD6; color: #333333; " >
< th runat = " server " >
</ th >
< th runat = " server " >
用户ID
</ th >
< th runat = " server " >
用户名
</ th >
< th runat = " server " >
用户密码
</ th >
< th runat = " server " >
所属角色
</ th >
< th runat = " server " >
用户矿籍
</ th >
< th runat = " server " >
用户单位
</ th >
</ tr >
< tr id = " itemPlaceholder " runat = " server " >
</ tr >
</ table >
</ td >
</ tr >
< tr runat = " server " >
< td runat = " server " style = " text-align: center; background-color: #FFCC66; font-family: Verdana, Arial, Helvetica, sans-serif;
color: # 333333 ; " >
< asp:DataPager ID = " DataPager1 " runat = " server " >
< Fields >
< asp:NextPreviousPagerField ButtonType = " Button " ShowFirstPageButton = " True " ShowLastPageButton = " True " />
</ Fields >
</ asp:DataPager >
</ td >
</ tr >
</ table >
</ LayoutTemplate >
< InsertItemTemplate >
< tr style = "" >
< td >
< asp:Button ID = " InsertButton " runat = " server " CommandName = " Insert " Text = " 插入 " />
< asp:Button ID = " CancelButton " runat = " server " CommandName = " Cancel " Text = " 清除 " />
</ td >
< td >
< asp:TextBox ID = " UserIDTextBox " runat = " server " Text = ' <%# Bind("UserID") %> ' Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_NAMETextBox " runat = " server " Text = ' <%# Bind("USER_NAME") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_PASSWORDTextBox " runat = " server " Text = ' <%# Bind("USER_PASSWORD") %> '
Width = " 70 " />
</ td >
< td >
< asp:DropDownList ID = " roleddl " runat = " server " DataSourceID = " sqlroleds " DataValueField = " RoleId "
DataTextField = " RoleName " OnDataBound = " roleddl_DataBound " >
</ asp:DropDownList >
</ td >
< td >
< asp:TextBox ID = " USER_DWBMTextBox " runat = " server " Text = ' <%# Bind("USER_DWBM") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " DEPCODETextBox " runat = " server " Text = ' <%# Bind("DEPCODE") %> ' Width = " 70 " />
</ td >
</ tr >
</ InsertItemTemplate >
< SelectedItemTemplate >
< tr style = " background-color: #FFCC66; font-weight: bold; color: #000080; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ SelectedItemTemplate >
< EmptyDataTemplate >
< table runat = " server " style = " background-color: #FFFFFF; border-collapse: collapse;
border - color: # 999999 ; border - style: none; border - width: 1px; " >
< tr >
< td >
No data was returned.
</ td >
</ tr >
</ table >
</ EmptyDataTemplate >
< EditItemTemplate >
< tr style = " background-color: #FFCC66; color: #000080; " >
< td >
< asp:Button ID = " UpdateButton " runat = " server " CommandName = " Update " Text = " 更新 " />
< asp:Button ID = " CancelButton " runat = " server " CommandName = " Cancel " Text = " 取消 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel1 " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:TextBox ID = " USER_NAMETextBox " runat = " server " Text = ' <%# Bind("USER_NAME") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_PASSWORDTextBox " runat = " server " Text = ' <%# Bind("USER_PASSWORD") %> '
Width = " 70 " />
</ td >
< td >
<%--在listview EdititemTemplate中定义一个ID为roleddl的DropDownList控件
OnDataBound事件邦定roleddl_DataBound事件
--%> < asp:DropDownList ID = " roleddl " runat = " server " DataSourceID = " sqlroleds " DataValueField = " RoleId "
DataTextField = " RoleName " OnDataBound = " roleddl_DataBound " >
</ asp:DropDownList >
</ td >
< td >
< asp:TextBox ID = " USER_DWBMTextBox " runat = " server " Text = ' <%# Bind("USER_DWBM") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " DEPCODETextBox " runat = " server " Text = ' <%# Bind("DEPCODE") %> ' Width = " 70 " />
</ td >
</ tr >
</ EditItemTemplate >
< ItemTemplate >
< tr style = " background-color: #FFFBD6; color: #333333; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ ItemTemplate >
</ asp:ListView >
</ ContentTemplate >
</ asp:UpdatePanel >
< ContentTemplate >
< asp:ListView ID = " ListView1 " runat = " server " DataKeyNames = " UserID " DataSourceID = " SqlDataSource1 "
InsertItemPosition = " LastItem " OnItemUpdating = " ListView1_ItemUpdating "
oniteminserting = " ListView1_ItemInserting " >
< AlternatingItemTemplate >
< tr style = " background-color: #FAFAD2; color: #284775; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ AlternatingItemTemplate >
< LayoutTemplate >
< table runat = " server " >
< tr runat = " server " >
< td runat = " server " >
< table id = " itemPlaceholderContainer " runat = " server " border = " 1 " style = " background-color: #FFFFFF;
border - collapse: collapse; border - color: # 999999 ; border - style: none; border - width: 1px;
font - family: Verdana, Arial, Helvetica, sans - serif; " >
< tr runat = " server " style = " background-color: #FFFBD6; color: #333333; " >
< th runat = " server " >
</ th >
< th runat = " server " >
用户ID
</ th >
< th runat = " server " >
用户名
</ th >
< th runat = " server " >
用户密码
</ th >
< th runat = " server " >
所属角色
</ th >
< th runat = " server " >
用户矿籍
</ th >
< th runat = " server " >
用户单位
</ th >
</ tr >
< tr id = " itemPlaceholder " runat = " server " >
</ tr >
</ table >
</ td >
</ tr >
< tr runat = " server " >
< td runat = " server " style = " text-align: center; background-color: #FFCC66; font-family: Verdana, Arial, Helvetica, sans-serif;
color: # 333333 ; " >
< asp:DataPager ID = " DataPager1 " runat = " server " >
< Fields >
< asp:NextPreviousPagerField ButtonType = " Button " ShowFirstPageButton = " True " ShowLastPageButton = " True " />
</ Fields >
</ asp:DataPager >
</ td >
</ tr >
</ table >
</ LayoutTemplate >
< InsertItemTemplate >
< tr style = "" >
< td >
< asp:Button ID = " InsertButton " runat = " server " CommandName = " Insert " Text = " 插入 " />
< asp:Button ID = " CancelButton " runat = " server " CommandName = " Cancel " Text = " 清除 " />
</ td >
< td >
< asp:TextBox ID = " UserIDTextBox " runat = " server " Text = ' <%# Bind("UserID") %> ' Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_NAMETextBox " runat = " server " Text = ' <%# Bind("USER_NAME") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_PASSWORDTextBox " runat = " server " Text = ' <%# Bind("USER_PASSWORD") %> '
Width = " 70 " />
</ td >
< td >
< asp:DropDownList ID = " roleddl " runat = " server " DataSourceID = " sqlroleds " DataValueField = " RoleId "
DataTextField = " RoleName " OnDataBound = " roleddl_DataBound " >
</ asp:DropDownList >
</ td >
< td >
< asp:TextBox ID = " USER_DWBMTextBox " runat = " server " Text = ' <%# Bind("USER_DWBM") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " DEPCODETextBox " runat = " server " Text = ' <%# Bind("DEPCODE") %> ' Width = " 70 " />
</ td >
</ tr >
</ InsertItemTemplate >
< SelectedItemTemplate >
< tr style = " background-color: #FFCC66; font-weight: bold; color: #000080; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ SelectedItemTemplate >
< EmptyDataTemplate >
< table runat = " server " style = " background-color: #FFFFFF; border-collapse: collapse;
border - color: # 999999 ; border - style: none; border - width: 1px; " >
< tr >
< td >
No data was returned.
</ td >
</ tr >
</ table >
</ EmptyDataTemplate >
< EditItemTemplate >
< tr style = " background-color: #FFCC66; color: #000080; " >
< td >
< asp:Button ID = " UpdateButton " runat = " server " CommandName = " Update " Text = " 更新 " />
< asp:Button ID = " CancelButton " runat = " server " CommandName = " Cancel " Text = " 取消 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel1 " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:TextBox ID = " USER_NAMETextBox " runat = " server " Text = ' <%# Bind("USER_NAME") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " USER_PASSWORDTextBox " runat = " server " Text = ' <%# Bind("USER_PASSWORD") %> '
Width = " 70 " />
</ td >
< td >
<%--在listview EdititemTemplate中定义一个ID为roleddl的DropDownList控件
OnDataBound事件邦定roleddl_DataBound事件
--%> < asp:DropDownList ID = " roleddl " runat = " server " DataSourceID = " sqlroleds " DataValueField = " RoleId "
DataTextField = " RoleName " OnDataBound = " roleddl_DataBound " >
</ asp:DropDownList >
</ td >
< td >
< asp:TextBox ID = " USER_DWBMTextBox " runat = " server " Text = ' <%# Bind("USER_DWBM") %> '
Width = " 70 " />
</ td >
< td >
< asp:TextBox ID = " DEPCODETextBox " runat = " server " Text = ' <%# Bind("DEPCODE") %> ' Width = " 70 " />
</ td >
</ tr >
</ EditItemTemplate >
< ItemTemplate >
< tr style = " background-color: #FFFBD6; color: #333333; " >
< td >
< asp:Button ID = " DeleteButton " runat = " server " CommandName = " Delete " Text = " 删除 " />
< asp:Button ID = " EditButton " runat = " server " CommandName = " Edit " Text = " 编辑 " />
</ td >
< td >
< asp:Label ID = " UserIDLabel " runat = " server " Text = ' <%# Eval("UserID") %> ' />
</ td >
< td >
< asp:Label ID = " USER_NAMELabel " runat = " server " Text = ' <%# Eval("USER_NAME") %> ' />
</ td >
< td >
< asp:Label ID = " USER_PASSWORDLabel " runat = " server " Text = ' <%# Eval("USER_PASSWORD") %> ' />
</ td >
< td >
< asp:Label ID = " RoleIdLabel " runat = " server " Text = ' <%# Eval("RoleId") %> ' />
</ td >
< td >
< asp:Label ID = " USER_DWBMLabel " runat = " server " Text = ' <%# Eval("USER_DWBM") %> ' />
</ td >
< td >
< asp:Label ID = " DEPCODELabel " runat = " server " Text = ' <%# Eval("DEPCODE") %> ' />
</ td >
</ tr >
</ ItemTemplate >
</ asp:ListView >
</ ContentTemplate >
</ asp:UpdatePanel >
后台代码
protected
void
roleddl_DataBound(
object
sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
//add an empty item on top of the list
AddEmptyItem(ddl);
ListViewDataItem listI = null;
//注意ListViewItemType.InsertItem,ddl.NamingContainer是ListViewItem对象,而不是ListVIew对象
if (((ListViewItem)ddl.NamingContainer).ItemType == ListViewItemType.DataItem)
{
listI = (ListViewDataItem)ddl.NamingContainer;
}
// frmV.
if (listI != null)
{
//Let's pull the province value from the databound item. The data
//in my application is supplied by BLL as a dataview. Therefore each
//item bound to the FormView is of type DataRowView. So let's cast
//that DataItem to the appropriate type to be able to use it
//记得要把DataItem改成DataRowView类型
string roleid = ((DataRowView)listI.DataItem).Row["roleid"].ToString();
ddl.ClearSelection();
//be careful of the possibility that the value saved on the
//database does not exist in the valid selections that are displayed
//on the list
ListItem li = ddl.Items.FindByValue(roleid);
if (li != null) li.Selected = true;
}
//since the city selection is dependent on the province, we
//have to databind the city list after we changed the selection for the province
//ddl = (DropDownList)frmV.FindControl("ddlCity");
//if (ddl != null) ddl.DataBind();
}
void AddEmptyItem(DropDownList ddl)
{
ListItem li = new ListItem("请选择", "");
ddl.Items.Insert(0, li);
}
protected void ListView1_ItemUpdating( object sender, ListViewUpdateEventArgs e)
{
if (Page.IsValid)
{
//ListView直接找不到DropDownList的
string roleid = ((DropDownList)((ListView)sender).Items[e.ItemIndex].FindControl("roleddl")).SelectedValue;
e.NewValues["roleid"] = roleid;
e.Cancel = false;
}
else
e.Cancel = true;
}
protected void ListView1_ItemInserting( object sender, ListViewInsertEventArgs e)
{
string roleid = ((DropDownList)e.Item.FindControl("roleddl")).SelectedValue;
//如果没有选择正确角色,则取消更新
if (roleid == "请选择")
e.Cancel = true;
else
{
e.Values["roleid"] = roleid;
e.Cancel = false;
}
}
{
DropDownList ddl = (DropDownList)sender;
//add an empty item on top of the list
AddEmptyItem(ddl);
ListViewDataItem listI = null;
//注意ListViewItemType.InsertItem,ddl.NamingContainer是ListViewItem对象,而不是ListVIew对象
if (((ListViewItem)ddl.NamingContainer).ItemType == ListViewItemType.DataItem)
{
listI = (ListViewDataItem)ddl.NamingContainer;
}
// frmV.
if (listI != null)
{
//Let's pull the province value from the databound item. The data
//in my application is supplied by BLL as a dataview. Therefore each
//item bound to the FormView is of type DataRowView. So let's cast
//that DataItem to the appropriate type to be able to use it
//记得要把DataItem改成DataRowView类型
string roleid = ((DataRowView)listI.DataItem).Row["roleid"].ToString();
ddl.ClearSelection();
//be careful of the possibility that the value saved on the
//database does not exist in the valid selections that are displayed
//on the list
ListItem li = ddl.Items.FindByValue(roleid);
if (li != null) li.Selected = true;
}
//since the city selection is dependent on the province, we
//have to databind the city list after we changed the selection for the province
//ddl = (DropDownList)frmV.FindControl("ddlCity");
//if (ddl != null) ddl.DataBind();
}
void AddEmptyItem(DropDownList ddl)
{
ListItem li = new ListItem("请选择", "");
ddl.Items.Insert(0, li);
}
protected void ListView1_ItemUpdating( object sender, ListViewUpdateEventArgs e)
{
if (Page.IsValid)
{
//ListView直接找不到DropDownList的
string roleid = ((DropDownList)((ListView)sender).Items[e.ItemIndex].FindControl("roleddl")).SelectedValue;
e.NewValues["roleid"] = roleid;
e.Cancel = false;
}
else
e.Cancel = true;
}
protected void ListView1_ItemInserting( object sender, ListViewInsertEventArgs e)
{
string roleid = ((DropDownList)e.Item.FindControl("roleddl")).SelectedValue;
//如果没有选择正确角色,则取消更新
if (roleid == "请选择")
e.Cancel = true;
else
{
e.Values["roleid"] = roleid;
e.Cancel = false;
}
}
本人文笔不好,请朋友们多多包函。祝好运!