这可能是另一种我认为错误的情况。我责备自己。
但是我对DetailsView中FindControl的行为感到困惑,如下所示。
FindControl一直有效,直到我从DataControlFieldCollection中删除一个字段。如果重要,这是在MasterPage。
我已尝试移动删除Page_Load,Page_PreRender中的DataControlField以及dvCategories的ModeChanged和ModeChanging事件的代码。
我也试过从很多地方调用dvCategories.Databind()无济于事。
这是预期的行为,是否有解决方法?
protected void ldsCategories_OnInserting(object sender, LinqDataSourceInsertEventArgs e)
{
//Here findcontrol works unless the commented code from the button event handler is fired.
TextBox tb = (TextBox) dvCategories.FindControl("txtInsertParentId");
string ParentName = tb.Text;
}
protected void btnNew_click(object sender, EventArgs e)
{
dvCategories.ChangeMode(DetailsViewMode.Insert);
//dvCategories.Fields.RemoveAt(3);
}
ASP代码:
<asp:DetailsView ID="dvCategories" runat="server" AutoGenerateEditButton="True" AutoGenerateInsertButton="True" DataSourceID="ldsCategories" AutoGenerateRows="False" DataKeyNames="CategoryId" DefaultMode="ReadOnly">
<Fields>
<asp:BoundField DataField="CategoryId" HeaderText="CategoryId" InsertVisible="False" ReadOnly="True" SortExpression="CategoryId" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:TemplateField HeaderText="Parent Name">
<InsertItemTemplate>
<asp:TextBox ID="txtInsertParentId" runat="server"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ContentPath" HeaderText="ContentPath" SortExpression="ContentPath" />
<asp:BoundField DataField="DisplayUrl" HeaderText="DisplayUrl" SortExpression="DisplayUrl" />
<asp:BoundField DataField="MetaDesc" HeaderText="MetaDesc" SortExpression="MetaDesc" />
</Fields>
</asp:DetailsView>
<asp:LinqDataSource ID="ldsCategories" runat="server" ContextTypeName="ProductsDataContext" TableName="Categories" EnableInsert="True" EnableUpdate="True" OnInserting="ldsCategories_OnInserting" EntityTypeName="" Where="CategoryId == @CategoryId && Name == @Name" OnInserted="ldsCategories_OnInserted">
<WhereParameters>
<asp:ControlParameter ControlID="txtCategory" Name="Name" PropertyName="Text" Type="String" DefaultValue="" />
</WhereParameters>
</asp:LinqDataSource>
答案 0 :(得分:0)
我真的是个假人。我不需要删除该字段,只需隐藏它即可。
这样可行:
dvCategories.Fields[3].Visible = false;
FindControl也适用于这种技术。我仍然不知道为什么修改集合会破坏findcontrol ......