我在Gridview中动态创建一个Item模板。
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事件将正确触发。当我单击“更新”或“取消”按钮时,没有任何触发。当我在ascx页面中显式地放置onUpdateCommand或onCancelCommand时,ItemCommand不会触发,UpdateCommand或CancelCommand也不会触发。我无法弄清楚为什么在单击EditItemTemplate中的按钮时没有触发。此外,每个page_init回发都会加载所有内容。任何提示都会有所帮助
答案 0 :(得分:1)
我明白了。我基本上创建了一个项目模板,并添加了3个单独的按钮而不使用edititem。在数据网格itemdatabound函数中,我只是隐藏并显示需要显示的按钮。
答案 1 :(得分:0)
您是否在网格的PreRender中重新绑定事件?
答案 2 :(得分:0)
我今天遇到了同样的问题。我注意到它正在调用编辑项目的“标题”模板。不确定原因,但在“切换”之前添加以下内容:
System.Diagnostics.Debug.WriteLine(string.Format("Template: {0}",ItemType.ToString()));
如果您使用少量记录进行测试,则在尝试编辑记录时,您应该能够看到它调用“标题”项目类型。
我很想知道你是否经历过同样的事情。