日期:2014-05-18  浏览次数:20423 次

急急...急晕了的一个问题 DataList
datalist   里有两个ImageButton   ,commandname分别设为 "delete "和 "eidt ",后台加处理函数datalst1_itemCommand(object   source,   System.Web.UI.WebCOntrols.DataListCommandEventArgs   e)
{
  int   id   =   (int)Datalist.DataKeys[e.item.itemindex];
  if(e.commandname== "delete ")
      {
        //进行删除操作
      }
    if(e.commandname== "edit ")
    {
        //进行更新操作
      }
}
在显示层,Datalst的OnItemCommand= "datalst1_itemCommand "
但问题是,程序根本不执行!!设置断点运行,根本不执行datalst1_itemCommand函数里的行!!!
晕啊~~急急...快疯了啊

------解决方案--------------------
http://rainfeet.spaces.live.com/

可以参考一下
------解决方案--------------------
你是否在Page_Load事件里把绑定列表放在(!IsPstBack)里面了!
而且同时用PlaceHolder载入了一个.ascx形式的Skin控件
如果是,
请参照下面的示例注释该条件 
// if(!IsPostBack)
// {
AgrExibition.Buyer.Framework.Components.BuyerCollection sc=AgrExibition.Buyer.Framework.Data.DataDTOProvider.GetBuyerReturnCollectionWithCondition(word.Trim(),pager.PageIndex,pager.PageSize,sort,0, " ", " ", " ", " ",years,inviter,exbiname, " ");
dataGrid.DataSource=sc;
dataGrid.DataBind();

if(sc.MaxItems> 0)
{
pager.ItemCount=sc.MaxItems;
}
else
{
pager.Visible=false;
}
//}
------解决方案--------------------
事件已丢失
加入datalist.ItemCommand+=new DataListCommandEventHandler(datalst1_itemCommand)

另外你的程序写的确实很让人郁闷


datalist 里有两个ImageButton ,commandname分别设为 "delete "和 "eidt ",后台加处理函数
//一处是edit 一处是eidt,那个edit分支永远不会走到
datalst1_itemCommand(object source, System.Web.UI.WebCOntrols.DataListCommandEventArgs
e)
//不知道你怎么copy过来的WebCOntrols也能出来,一般引入System.Web.UI.WebControls,类名过长影响阅读
{
//如果引发itemcommand的是headerTemplate或者footerTemplate,这儿会抛出一个异常,因为索引不能从-1开始
int id = (int)Datalist.DataKeys[e.item.itemindex];
//if ... if 应改为if ...else if...虽然不会有一个字符串又等于delete又等于edit但如//commandname== "delete " 执行完if分支后会继续判断下一个if.选用else if更高效
if(e.commandname== "delete ")
{
//进行删除操作
}
if(e.commandname== "edit ")
{
//进行更新操作
}
}
------解决方案--------------------
加入datalist.ItemCommand+=new DataListCommandEventHandler(datalst1_itemCommand)正解
------解决方案--------------------
另外,页面里两个元素有没有加 CommandName= "Delete " 和 CommandName= "Edit "
------解决方案--------------------
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (e.CommandName == "edit ")
{
操作
}
}
------解决方案--------------------
page_load里面
有没有
if(!IsPostBack)
{
DataList绑定;
}
------解决方案--------------------
估计 datalist丢失了事件,常见的事情,把OnRowCommand= "GridView_RowCommand " 这个看看有么有
------解决方案--------------------
还有就是如果按钮的名字使用了 delete ,edit,就会使用默认的事件,会执行 deletecommand, editcommand 这两个事件。你自己看看是哪个原因。