C# 在FormView插入帮助后向面板添加控件
这是我的HTMLC# 在FormView插入帮助后向面板添加控件,c#,asp.net,updatepanel,objectdatasource,C#,Asp.net,Updatepanel,Objectdatasource,这是我的HTML <asp:UpdatePanel runat="server" ID="panel1" UpdateMode="Conditional"> <ContentTemplate> <asp:FormView runat="server" ID="formViewUno" DataSourceID="odsBob" DefaultMode="Insert">
<asp:UpdatePanel runat="server" ID="panel1" UpdateMode="Conditional">
<ContentTemplate>
<asp:FormView runat="server" ID="formViewUno" DataSourceID="odsBob" DefaultMode="Insert">
<InsertItemTemplate>
<span>Name:</span>
<asp:Literal ID="Literal4" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxName" Text='<%# Bind("Name") %>' />
<br />
<span>Age:</span>
<asp:Literal ID="Literal5" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxAge" Text='<%# Bind("Age") %>' />
<br />
<span>City:</span>
<asp:Literal ID="Literal6" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxCity" Text='<%# Bind("City") %>' />
<br />
<asp:Button ID="Button1" runat="server" CommandName="Insert" Text="Insert" />
</InsertItemTemplate>
</asp:FormView>
<asp:Panel runat="server" ID="msgs">
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
姓名:
年龄:
城市:
这是我的C#
private void odsBob_已插入(对象发送方,ObjectDataSourceStatusEventArgs e)
{
var p=作为个人的e.ReturnValue;
如果(p!=null)
{
var msg=新标签
{
正文=
String.Format(“{0}[Age:{1},City:{2}]已成功添加”,p.Name,p.Age,
p、 (城市)
};
var br=new LiteralControl{Text=“
”};
msgs.Controls.Add(br);
msgs.Controls.Add(msg);
}
}
如何保持标签控件(插入后添加新控件)?它正在被消灭。每次正确添加新添加的。如何保持控件集合的圆滑?谢谢你的帮助
干杯,
~ck看起来您正在事件处理程序中动态创建标签对象 动态控件是有问题的,因为它们需要在每次回发时重新创建。请记住,回发会创建页面对象的新实例—这意味着您添加到上一页的控件将消失—每个新请求都会将面板初始化为空,因此只会添加最新的文本/标签对 一种解决方案可能是将所有必要的文本信息添加到会话中,并让您的面板在预渲染期间从会话中的任何内容生成动态标签和文字
另一个解决方案可能更复杂,但您可以让面板在初始化阶段动态添加标签和文字。如果可以确保在初始化期间以相同的顺序添加相同数量的控件,则在每次回发时将正确跟踪这些控件的ViewState。您基本上需要将最近添加的标签和文字存储到会话中,并让面板在下一个请求时将其取出,以确保在Init期间将其重新添加。您还需要存储一个计数器,以便面板知道在Init期间要添加多少组控件。看起来您正在事件处理程序期间动态创建一个label对象 动态控件是有问题的,因为它们需要在每次回发时重新创建。请记住,回发会创建页面对象的新实例—这意味着您添加到上一页的控件将消失—每个新请求都会将面板初始化为空,因此只会添加最新的文本/标签对 一种解决方案可能是将所有必要的文本信息添加到会话中,并让您的面板在预渲染期间从会话中的任何内容生成动态标签和文字
另一个解决方案可能更复杂,但您可以让面板在初始化阶段动态添加标签和文字。如果可以确保在初始化期间以相同的顺序添加相同数量的控件,则在每次回发时将正确跟踪这些控件的ViewState。您基本上需要将最近添加的标签和文字存储到会话中,并让面板在下一个请求时将其取出,以确保在Init期间将其重新添加。您还需要存储一个计数器,以便面板知道在初始化期间要添加多少组控件。我使用的是objectDatasouce。我没有在任何地方明确地调用数据绑定。我应该是吗?我应该只绑在这里吗!我回来了?我以为在使用DataSourceId时会隐式调用databind。请指出正确执行此操作的方向。谢谢。:)男人谈论盲人。我误读了你的密码。我将为您更新我的答案。我正在使用objectDatasouce。我没有在任何地方明确地调用数据绑定。我应该是吗?我应该只绑在这里吗!我回来了?我以为在使用DataSourceId时会隐式调用databind。请指出正确执行此操作的方向。谢谢。:)男人谈论盲人。我误读了你的密码。我会为你更新我的答案。
private void odsBob_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
var p = e.ReturnValue as Person;
if (p != null)
{
var msg = new Label
{
Text =
String.Format("{0} [Age:{1}, City:{2}] was successfully added", p.Name, p.Age,
p.City)
};
var br = new LiteralControl { Text = "<br/>" };
msgs.Controls.Add(br);
msgs.Controls.Add(msg);
}
}