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