我在实现一个从数据库中删除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

解决方案 »

  1.   

    你不如在<asp:datalist ...>加
    <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();
    }
      

  2.   

    哦,我忘了说了,之前我已经用DataKeyField实现了删除的功能。不过,我就是想不通,怎么((Label)e.Item.FindControl("lblID")).Text返回的是 "" 呢??MSDN上面的一个范例用这样的语句就能正常得到Label的Text属性值,请赐教!
      

  3.   

    <asp:Label id="lblID" runat="server">
    <%#DataBinder.Eval(Container.DataItem,"DeptID")%>
    </asp:Label>
    to:
    <asp:Label id="lblID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"DeptID")%>
    '>
    </asp:Label>
    你根本没绑定值,何来TEXT;
      

  4.   

    在控件中的Text属性绑定后才能得到,up
      

  5.   

    哦,原来是这样,我还以为直接这样:
    <asp:Label id="lblID" runat="server">
       <%#DataBinder.Eval(Container.DataItem,"DeptID")%>
    </asp:Label>
    就可以绑定Text的植了呢
    谢谢各位!菜鸟真辛苦!