我实现了一个新的动态ItemTemplate,如下所示:
private sealed class CustomItemTemplate : ITemplate
{
public CustomItemTemplate()
{}
void ITemplate.InstantiateIn(Control container)
{
Table ItemTable = new Table();
ItemTable.CssClass = "tablewidth";
TableRow btnRow = new TableRow();
ItemTable.Rows.Add(btnRow);
TableCell btnCell = new TableCell();
btnCell.CssClass = "bgcolorBlueLight";
btnCell.ColumnSpan = 2;
btnRow.Cells.Add(btnCell);
ImageButton ImgBtnfvPrincipalInsertMode = new ImageButton();
ImgBtnfvPrincipalInsertMode.CausesValidation = false;
ImgBtnfvPrincipalInsertMode.ImageUrl = "~/Images/icon_insert_16.gif";
ImgBtnfvPrincipalInsertMode.CommandName = "New";
ImageButton ImgBtnfvPrincipalUpdateMode = new ImageButton();
ImgBtnfvPrincipalUpdateMode.CausesValidation = false;
ImgBtnfvPrincipalUpdateMode.ImageUrl = "~/Images/icon_edit_16.gif";
ImgBtnfvPrincipalUpdateMode.CommandName = "Edit";
btnCell.Controls.Add(ImgBtnfvPrincipalInsertMode);
btnCell.Controls.Add(ImgBtnfvPrincipalUpdateMode);
container.Controls.Add(ItemTable);
}
}
它包含两个按钮,第一个打开插入模式,第二个打开更新模式。他们出现没问题。
我的目标是在形式视图中使用它:
protected void Page_Load(object sender, EventArgs e)
{
formView1.ItemTemplate = new CustomItemTemplate();
}
我想从两个按钮中捕捉命令:
protected void formView1_ItemCommand(object sender, FormViewCommandEventArgs e)
{
System.Diagnostics.Debug.WriteLine("ITEM COMMANDNAME : " + e.CommandName);
}
不幸的是,当我点击我的按钮时,formView1_ItemCommand不会显示任何内容
然而,如果我宣布ItemTemplate classicaly:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProspectsCustomFormView.ascx.cs" Inherits="controls_ProspectsCustomFormView" %>
<asp:FormView ID="formView1" runat="server" OnItemCommand="formView1_ItemCommand">
<ItemTemplate>
<asp:Table ID="ItemTable" runat="server" CssClass="tablewidth">
<asp:TableRow>
<asp:TableCell CssClass="bgcolorBlueLight" ColumnSpan="2">
<asp:ImageButton ID="ImgBtnfvPrincipalInsertMode" runat="server" CommandName="New" CausesValidation="False" ImageUrl="~/Images/icon_insert_16.gif" ToolTip="New"/>
<asp:ImageButton ID="ImgBtnfvPrincipalUpdateMode" runat="server" CommandName="Edit" CausesValidation="False" ImageUrl="~/Images/icon_edit_16.gif" ToolTip="Edit" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</ItemTemplate>
</asp:FormView>
然后它有用......
您建议使用哪种解决方案?
修改
忘记提及formView实际上包含在用户控件中:
public partial class controls_CustomFormView : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
fv.ItemTemplate = new CustomItemTemplate();
}
private sealed class CustomItemTemplate : ITemplate
{...}
}
答案 0 :(得分:0)
这有点超出我的经验,但我注意到你没有在你的模板中显示你的按钮来引发事件。您似乎没有处理按钮命令引发的事件。
我没有看到让按钮导致他们所居住的模板对象引发其ItemCommand
事件。
就像我说的,这有点超出我的经验,所以也许应该自动连接自己。但我会尝试处理按钮“Command
”事件并让他们提升模板的ItemCommand
。
ETA:做过一些阅读后,我觉得Luizgrs是对的,你不需要做特殊的事件处理。
我现在想知道问题是你没有将任何控件添加到container.Controls
直到最后。通过这种方式,您依靠Add
的{{1}}方法来浏览container.Controls
的控件层次结构,并使用Table
连接所有命令事件
就像实验一样,尝试移动这一行:
BubbleEvent
...直到顶部,像这样:
container.Controls.Add(ItemTable);
不同之处在于,您现在所有的控件添加内容都已存在于 Table ItemTable = new Table();
ItemTable.CssClass = "tablewidth";
container.Controls.Add(ItemTable);
内的控件中。
ETA:还有!您需要为按钮分配ID!
container.Controls