开发者

Binding a certain value on a control in a ListView's Insert template

I have a list view with a label that shows "Step #x", another label with the instructions, and then 2 linkbuttons for editing or deleting. At the footer of the ListView is another button "Add New Step" which opens up an empty TextBox and two buttons to save and cancel. I would also like it to increment the label, but I can seem to find the control in the code behind to change it's text. How do I do this?

Here's the asp markup:

<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") ) %开发者_StackOverflow>' 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>

And some attempted code:

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


I believe lvSteps has a reference to InsertItem (as in lv.InsertItem.FindControl("")), which you can use to find controls in the insert template. For lvSteps.FindControl finds controls created in the layout template. I think ItemDataBound or ItemCreated may also fire for the insert item, but I'm not 100% sure about that.

Property definition is available here: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.insertitemtemplate.aspx

HTH.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜