C# 在ListView';s插入模板

C# 在ListView';s插入模板,c#,asp.net,listview,C#,Asp.net,Listview,我有一个列表视图,其中一个标签显示“Step#x”,另一个标签上有说明,然后是两个用于编辑或删除的链接按钮。在ListView的页脚是另一个按钮“AddNewStep”,它打开一个空文本框和两个保存和取消按钮。我还希望它增加标签,但我似乎可以在代码中找到控件来更改它的文本。我该怎么做 以下是asp标记: <asp:ListView ID="lvSteps" runat="server" DataSourceID="ldsProcessStep" DataKeyNames="ID" Inse

我有一个列表视图,其中一个标签显示“Step#x”,另一个标签上有说明,然后是两个用于编辑或删除的链接按钮。在ListView的页脚是另一个按钮“AddNewStep”,它打开一个空文本框和两个保存和取消按钮。我还希望它增加标签,但我似乎可以在代码中找到控件来更改它的文本。我该怎么做

以下是asp标记:

<asp:ListView ID="lvSteps" runat="server" DataSourceID="ldsProcessStep" DataKeyNames="ID" InsertItemPosition="None">
    <LayoutTemplate>
        <div><asp:PlaceHolder ID="itemPlaceholder" runat="server" /></div>
        <asp:Button ID="btnAddNewStep" runat="server" Text="Add New Step" OnClick="btnAddNewStep_Click" />
    </LayoutTemplate>
    <ItemTemplate>
        <table width="100%">
            <tr>
                <td>
                    <asp:label runat="server" Text='<%# Eval( "StepNumber", "Step #{0}" ) %>' Width="75px" style="font-size:medium; font-weight:bold;" />
                </td>
                <td>
                    <div style="text-align:left; width:350px;">
                        <asp:label runat="server" Text='<% #( Eval("Instruction") ) %>' style="font-size:85%;" />
                    </div>
                </td>
                <td>
                    <div style="width:50px;">
                        <div><asp:LinkButton Text="Edit" runat="server" CommandName="Edit" style="font-size:75%;" /></div>
                        <div style="margin-top:5px;"><asp:LinkButton Text="Delete" runat="server" style="font-size:75%;" OnClientClick='<%# CreateConfirmation( Eval("StepNumber") ) %>' /></div>
                    </div>
                </td>
            </tr>
        </table>
        <hr style="width:90%; margin-left:20px;" />
    </ItemTemplate>
    <InsertItemTemplate>
        <table width="100%">
            <tr>
                <td>
                    <asp:Label ID="lblNewStepNumber" runat="server" Width="75px" Text="????" style="font-size:medium; font-weight:bold;" />
                </td>
                <td>
                    <div style="text-align:left; width:350px;">
                        <asp:TextBox ID="txtInstruction" runat="server" TextMode="MultiLine" Rows="3" Width="100%" Text='<%# Bind("Instruction") %>' style="font-size:85%;" />
                    </div>
                </td>
                <td>
                    <div style="width:50px;">
                        <div><asp:LinkButton ID="btnInsert" Text="Save" runat="server" CommandName="Insert" style="font-size:75%;" /></div>
                        <div style="margin-top:5px;"><asp:LinkButton ID="lnkCancelInsert" Text="Cancel" runat="server" CommandName="Cancel" OnClick="btnCancelInsert_Click" style="font-size:75%;" /></div>
                    </div>
                </td>
            </tr>
        </table>
    </InsertItemTemplate>
</asp:ListView>

我相信lvSteps引用了InsertItem(如在lv.InsertItem.FindControl(“”)中),您可以使用它在insert模板中查找控件。对于lvSteps.FindControl,查找在布局模板中创建的控件。我认为ItemDataBound或itemscreated可能也会为insert项目触发,但我不是100%确定

属性定义可在以下位置获得:


HTH.

使用lvSteps.InsertItem.FindControl(“”),我仍然得到“对象引用未设置为对象实例”的确定,然后您可以尝试itemcommand或itemdatabound事件处理程序,并访问e.Item以获得插入项,我相信这也是一个选项。。。我不确定InsertItem为什么为null,但我知道在访问它时必须小心。InsertItem可能仅在绑定到列表时可用,我想。。。。查看上面的文档链接,了解有关该物业的更多信息;没有发现任何关于null的问题。当然,在设置InsertTemposition后必须访问它…是否有一个评估可以作为我的标签文本?例如,没有eval支持,因为插入项没有可用的数据项。在itemcreated或itemdatabound中,您应该能够执行以下操作:如果(e.Item.ItemType==ListViewItemType.InsertItem),则执行插入代码。这就是按插入项类型以插入项为目标的方法。插入的行将位于事件参数中,例如Item。我返回并检查了我的一个页面。数据绑定时直接访问insertitem属性;我还在itemdatabound中访问了它,因此它必须仅在数据绑定时可用。此外,如果您不想使用itemdatabound,您应该能够在PreRender中访问InsertItem,前提是在此之前绑定了listview。
public void btnAddNewStep_Click( object sender, EventArgs e )
{
    lvSteps.InsertItemPosition = InsertItemPosition.LastItem;
    lvSteps.FindControl( "btnAddNewStep" ).Visible = false;

    //Cannot find control

    //lvSteps.FindControl( "lblNewStepNumber" ).Text = "doesn't work"

    //Label lbl = (Label)lvSteps.FindControl( "lblNewStepNumber" );
    //lbl.Text = "Doesn't work"'
}