我在实现一个从数据库中删除DataList控件中用户选中的项时遇到了一个奇怪的问题:
aspx编辑页面中的代码如下:
<asp:datalist ...>
<ItemTemplate>
Department:
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
<asp:LinkButton id="butEdit" Runat="server" CommandName="Edit">Edit</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:Label id="lblID" runat="server">
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
</asp:Label>
<asp:LinkButton id="butDelete" text="Delete" CommandName="Delete" runat="server"/>
</EditItemTemplate>
</asp:datalist>
aspx.cs编辑页面代码如下:
private void DataList_Edit(...)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
BindDataList();//前面定义的DataList绑定方法
} private void DataList_Delete(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
string TheID;
TheID = ((Label)e.Item.FindControl("lblID")).Text;
...//连接数据库并删除DeptID字段等于TheID的元组
BindDataList();
}Page_Load中连接数据库绑定到DataList一切正常,我后来以为是DataList_Delete方法中连接数据库有问题,不过我发现不是,问题出在((Label)e.Item.FindControl("lblID")).Text,他返回的字符串是空,即TheID=""
为什么会出现这种情况呢?而且如果我把DataList换成CheckBox不进行数据绑定的话我可以正常这样赋值:
TheID = ((CheckBox)e.Item.FindControl("cbTest")).Checked.Tostring;TheID可以正常得到True或者False
aspx编辑页面中的代码如下:
<asp:datalist ...>
<ItemTemplate>
Department:
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
<asp:LinkButton id="butEdit" Runat="server" CommandName="Edit">Edit</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:Label id="lblID" runat="server">
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
</asp:Label>
<asp:LinkButton id="butDelete" text="Delete" CommandName="Delete" runat="server"/>
</EditItemTemplate>
</asp:datalist>
aspx.cs编辑页面代码如下:
private void DataList_Edit(...)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
BindDataList();//前面定义的DataList绑定方法
} private void DataList_Delete(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
string TheID;
TheID = ((Label)e.Item.FindControl("lblID")).Text;
...//连接数据库并删除DeptID字段等于TheID的元组
BindDataList();
}Page_Load中连接数据库绑定到DataList一切正常,我后来以为是DataList_Delete方法中连接数据库有问题,不过我发现不是,问题出在((Label)e.Item.FindControl("lblID")).Text,他返回的字符串是空,即TheID=""
为什么会出现这种情况呢?而且如果我把DataList换成CheckBox不进行数据绑定的话我可以正常这样赋值:
TheID = ((CheckBox)e.Item.FindControl("cbTest")).Checked.Tostring;TheID可以正常得到True或者False
<asp:datalist ...DataKeyField="DeptID">
然后
private void DataList_Delete(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
int TheID;
TheID = int.Parse(datalistname.DataKeys[e.Item.ItemIndex].ToString());
...//连接数据库并删除DeptID字段等于TheID的元组
BindDataList();
}
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
</asp:Label>
to:
<asp:Label id="lblID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
'>
</asp:Label>
你根本没绑定值,何来TEXT;
<asp:Label id="lblID" runat="server">
<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
</asp:Label>
就可以绑定Text的植了呢
谢谢各位!菜鸟真辛苦!