在ListView插入模板中绑定控件上的特定值

时间:2010-01-20 16:32:17

标签: c# asp.net listview

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

这是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>

一些尝试的代码:

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"'
}

1 个答案:

答案 0 :(得分:3)

我相信lvSteps有一个对InsertItem的引用(如在lv.InsertItem.FindControl(“”)中),您可以使用它来查找插入模板中的控件。对于lvSteps.FindControl,查找在布局模板中创建的控件。我认为ItemDataBound或ItemCreated也可以为插入项启动,但我不是百分之百确定。

此处提供了属性定义:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.insertitemtemplate.aspx

HTH。