I have an ASP.NET WebApplication page with DetailsView linked to a SqlDataSource.
When I try to change the mode using the automatic Edit or Insert buttons, events are fired.
When I try to change the mode programmatically by calling the DetailsView.ChangeMode method (inside a custom button click), the ModeChanging and ModeChanged events do not fire.
Why is this not working?
There is an aspx list:
<form id="form1" runat="server"> <div> <h1><asp:Label ID="Label" runat="server" Text="ReadOnly" /></h1> <asp:DetailsView ID="DetailsView" runat="server" DataSourceID="SqlDataSource" EnableModelValidation="True" AllowPaging="True" AutoGenerateEditButton="True" AutoGenerateInsertButton="True" OnModeChanged="DetailsView_ModeChanged"> <FooterTemplate> </FooterTemplate> </asp:DetailsView> <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:PEMDConnectionString %>" SelectCommand="SELECT * FROM [evd].[WaterTemplates]" InsertCommand="INSERT INTO [evd].[WaterTemplates] (TemplateName,TemplateDescription) VALUES (@Name,@Description)" /> <asp:Button ID="InsertByChangeModeButton" runat="server" OnClick="InsertByChangeModeButton_Click" Text="Insert By ChangeMode" /> <asp:Button ID="EditByChangeModeButton" runat="server" OnClick="EditByChangeModeButton_Click" Text="Edit By ChangeMode" /> </div> </form>
and here is the code behind:
namespace WebApplication1 { public partial class _Default : System.Web.UI.Page { protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); switch (DetailsView.CurrentMode) { case DetailsViewMode.Edit: case DetailsViewMode.Insert: EditByChangeModeButton.Visible = false; InsertByChangeModeButton.Visible = false; break; case DetailsViewMode.ReadOnly: InsertByChangeModeButton.Visible = true; EditByChangeModeButton.Visible = true; break; default: break; } } protected void InsertByChangeModeButton_Click(object sender, EventArgs e) { DetailsView.ChangeMode(DetailsViewMode.Insert); } protected void EditByChangeModeButton_Click(object sender, EventArgs e) { DetailsView.ChangeMode(DetailsViewMode.Edit); } protected void DetailsView_ModeChanged(object sender, EventArgs e) { switch (DetailsView.CurrentMode) { case DetailsViewMode.Edit: Label.Text = "Edit"; break; case DetailsViewMode.Insert: Label.Text = "Insert"; break; case DetailsViewMode.ReadOnly: Label.Text = "ReadOnly"; break; default: break; } } } }
source share