【问题标题】:Datagrid EditItemTemplate button event not firingDatagrid EditItemTemplate 按钮事件未触发
【发布时间】:2011-04-01 17:05:52
【问题描述】:

我在 Gridview 中动态创建项目模板。

TemplateColumn BtnTmpField = new TemplateColumn(); 
BtnTmpField.ItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.Item, "Edit", "Button");  
BtnTmpField.HeaderTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.Header, "Edit", "Command");  
BtnTmpField.EditItemTemplate = new DynamicallyTemplatedGridViewHandler(ListItemType.EditItem, "Update", "Button"); dgdefault.Columns.Add(BtnTmpField);

public void InstantiateIn(System.Web.UI.Control Container) 
{ 
    switch (ItemType) 
    { 
        case ListItemType.Header: Literal header_ltrl = new Literal(); 
        header_ltrl.Text = "" + FieldName + ""; 
        Container.Controls.Add(header_ltrl); 
        break; 
        case ListItemType.Item: 
        switch (InfoType) 
        { 
             case "Button": 
             LinkButton edit_button = new LinkButton(); 
             edit_button.ID = "edit_button"; 
             edit_button.Text = "Edit"; 
             edit_button.CommandName = "Edit"; 
             Container.Controls.Add(edit_button); 
             break; 
        }
        break;
        case ListItemType.EditItem: 
             if (InfoType == "Button") 
             { 
             LinkButton update_button = new LinkButton(); 
             update_button.ID = "update_button"; 
             update_button.CommandName = "Update"; 
             update_button.Text = "Update  "; 
             LinkButton cancel_button = new LinkButton(); 
             cancel_button.ID = "cancel_button"; 
             cancel_button.CommandName = "Cancel"; 
             cancel_button.Text = "Cancel"; 
             Container.Controls.Add(update_button); 
             Container.Controls.Add(cancel_button);
            }                 
            break;
      }     
} 

当我选择“编辑”按钮时,“更新”和“取消”按钮会显示所选行可编辑。单击“编辑”时,DataGrid 的 ItemCommand 事件会正确触发。当我单击“更新”或“取消”按钮时,没有任何反应。当我明确地将 onUpdateCommand 或 onCancelCommand 放在 ascx 页面中时,ItemCommand 不会触发,UpdateCommand 或 CancelCommand 也不会触发。我无法弄清楚为什么单击 EditItemTemplate 中的按钮时什么都没有触发。此外,每个 page_init 回发都正在加载所有内容。任何提示都会有所帮助

【问题讨论】:

    标签: c# dynamic datagrid linkbutton edititemtemplate


    【解决方案1】:

    我想通了。我基本上创建了一个项目模板,并在不使用 edititem 的情况下添加了 3 个单独的按钮。在数据网格itemdatabound函数中,我只是隐藏和显示了需要显示的按钮。

    【讨论】:

      【解决方案2】:

      您是否在网格的 PreRender 中重新绑定事件?

      【讨论】:

      • 是的,它在 page_init 事件中调用了绑定事件。
      • 根据我的经验,您必须在 Asp.Net 中绑定事件两次。在您处理事件之前一次,然后再一次,以便它们在页面上可用。所以,在 init 上一次是,然后在 PreRender 上一次。
      • 问题是,当我点击“取消”按钮后,“编辑”按钮按原样显示。然后我单击“编辑”按钮并再次触发 ItemCommand。出于某种原因,只有在 Edit Item 上才会触发 ItemCommand。
      • 我确实尝试了 PreRender 事件,但它仍然在做同样的事情。
      • 对不起,出于某种原因,我在考虑事件处理而不是命令处理。您的网格是否有 OnRowEditing 事件,然后在其中分配 grid.EditIndex = e.NewEditIndex;?您可能会这样做,因为它是第一次工作。
      【解决方案3】:

      我今天遇到了同样的问题。我注意到它正在调用“标题”模板来编辑项目。不知道为什么,但是在“switch”之前添加以下内容:

      System.Diagnostics.Debug.WriteLine(string.Format("Template: {0}",ItemType.ToString()));
      

      如果您使用少量记录进行测试,您应该能够在尝试编辑记录时看到它调用了“标题”项类型。

      我很想知道你是否遇到同样的事情。

      【讨论】:

        猜你喜欢
        • 2013-07-02
        • 2016-08-02
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多