Asp.net 在FormView中,如何更改ItemTemplate中标签的属性?
在ASP.NET中,我有一个绑定到ObjectDataSource的FormView。FormView有一个带有删除按钮的ItemTemplate和一个标签。我正在处理FormView的OnItemDeleted事件,以检测我的业务类在删除时是否引发异常。如果检测到异常,我会将标签文本更改为异常消息的任何内容 好吧,只是不起作用 我可以很好地检测到异常,但标签的文本从未更改。重新加载页面时,默认文本保持不变。在分配新文本后,我还尝试使用DataBind()重新绑定FormView,但它也不起作用 在追踪问题的绝望尝试中,我将标签从FormView中取出,它工作正常 我做错了什么 ASPX页面:Asp.net 在FormView中,如何更改ItemTemplate中标签的属性?,asp.net,data-binding,Asp.net,Data Binding,在ASP.NET中,我有一个绑定到ObjectDataSource的FormView。FormView有一个带有删除按钮的ItemTemplate和一个标签。我正在处理FormView的OnItemDeleted事件,以检测我的业务类在删除时是否引发异常。如果检测到异常,我会将标签文本更改为异常消息的任何内容 好吧,只是不起作用 我可以很好地检测到异常,但标签的文本从未更改。重新加载页面时,默认文本保持不变。在分配新文本后,我还尝试使用DataBind()重新绑定FormView,但它也不起作用
<asp:ObjectDataSource ID="MyObjectDataSource"
TypeName="MyScopeRepository"
SelectMethod="GetById"
DeleteMethod="Delete"
runat="server">
<SelectParameters>
<%-- The id param here is from a DropDownList, not included in the example for clarity. --%>
<asp:ControlParameter Name="id" Type="Int32" ControlID="MyDropDownList" PropertyName="SelectedValue" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
</asp:ObjectDataSource>
<asp:FormView ID="MyFormView" DataSourceID="MyObjectDataSource"
RenderOuterTable="false"
DataKeyNames="Id"
OnItemDeleted="MyFormViewItemDeleted"
runat="server">
<ItemTemplate>
<asp:Button CssClass="Button Small" Text="Delete" CommandName="Delete" runat="server" /><br />
<asp:Label ID="ErrorLabel" Text="Default text" runat="server" />
</ItemTemplate>
</asp:FormView>
非常感谢
编辑:我在单击删除按钮时检查了FormView触发的所有事件,下面是我得到的:
一种方法是向数据源对象添加另一个公共字段,称为“Error”,然后在
myformviewitemdelected
中更改正确的值并重新绑定FormView
就我所知,它应该可以工作,尽管可能有更简单/更简单的方法。下面是我在稍微修改代码后的做法。在代码隐藏中,在类中声明了一个字段:private string str_feedbackmsg
try
{
cnn.Open();
SqlCommand cmd = new SqlCommand(dbcmd, cnn);
cmd.ExecuteNonQuery();
str_feedbackmsg = "Database Work Done!";
}
catch (SqlException err)
{
str_feedbackmsg = "Database Error: Please Notify the Site Administrators.";
}
finally
{
cnn.Close();
}
然后在FormView的数据绑定事件中:
protected void gv_main_DataBound(object sender, EventArgs e)
{
if (IsPostBack)
{
Label l = fv_main.FindControl("lbl_feedback") as Label;
l.Text = str_feedbackmsg;
}
}
@md1337检查执行是否进入带有断点的循环…它是否存在于表单视图中,如网格视图中的数据绑定事件?@Pandiya-什么循环?我已经验证了执行是否到达MyFormViewItemDeleted,特别是errorLabel.Text行,如果这是您的意思的话。@Andrew-对不起,我不明白。我没有使用form view,但使用grid view时做得非常好。每次更改网格时,网格视图数据绑定将绑定整个数据源。所以我想为什么不能在form view中使用ondatabound事件也可以达到同样的目的。在OP中,我提到我尝试了这一点,并且它是有效的,但是我需要FormView中字段下的错误消息。我想这与在代码隐藏类中添加一个私有变量来保存消息一样,直到我们到达ItemCreated事件为止,在这一点上,我将粘贴到标签的消息。我不喜欢这个解决方案。感觉上我在用一些MacGyver代码绕过ASP.NET,但我看不到任何其他方法。@md-也看不到任何其他方法。。希望有人能带来一些东西。:)
public string MyProperty { get; set; }
protected void FormView1_DataBound(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(MyProperty))
{
Label l = FormView1.FindControl("Label1") as Label;
l.Text = "it works. " + MyProperty;
MyProperty = null;
}
}
protected void FormView1_ItemDeleted(object sender, FormViewDeletedEventArgs e)
{
if (e.Exception != null)
{
MyProperty = e.Exception.Message;
e.ExceptionHandled = true;
}
}
try
{
cnn.Open();
SqlCommand cmd = new SqlCommand(dbcmd, cnn);
cmd.ExecuteNonQuery();
str_feedbackmsg = "Database Work Done!";
}
catch (SqlException err)
{
str_feedbackmsg = "Database Error: Please Notify the Site Administrators.";
}
finally
{
cnn.Close();
}
protected void gv_main_DataBound(object sender, EventArgs e)
{
if (IsPostBack)
{
Label l = fv_main.FindControl("lbl_feedback") as Label;
l.Text = str_feedbackmsg;
}
}