OnItemUpdated がいつ起動されるかは、一生わかりません。私はそれを学ぼうとして ASP.NET をいじっていました。そのため、このコードで見られるいくつかのことは、意図的に難しい方法で行われている可能性があります (舞台裏で何が起こっているのかをよりよく理解できるようにするため)。
基本的に、フォームビューを詳細として使用するマスター コントロールである GridView があります。
ここにSelectedIndexChanged
方法がありますGridView
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
var context = new DataAccessLayer.SafetyEntities();
var se = (from c in context.Employees
where c.EID == (long)GridView1.SelectedDataKey.Value
select c).ToList();
FormView1.DataSource = se;
FormView1.DataKeyNames = new string[] { "EID" };
FormView1.DataBind();
}
それはうまく機能しています。選択した詳細が編集用のフォームに表示されます。これはformview
次のようになります。
<asp:FormView ID="FormView1" runat="server" DefaultMode="Edit" OnItemUpdating = "FormView1_ItemUpdating" OnItemUpdated="BLAH">
<ItemTemplate>
Select an employee!
</ItemTemplate>
<EditItemTemplate>
<table>
<tr>
<th>Name:
</th>
<td>
<asp:TextBox runat="server" ID ="NameEdit" Text='<%#Bind("Name") %>' />
</td>
<br />
</tr>
<tr>
<th>Manager:
</th>
<td>
<asp:DropDownList ID = "DDLEdit1" DataSourceID = "ManagerEntitySource" runat="server"
DataTextField = "Option_Value" DataValueField = "Option_Value"
SelectedValue = '<%#Bind("Manager") %>'
AppendDataBoundItems="true">
</asp:DropDownList>
</td>
<br />
</tr>
<tr>
<th>Location:
</th>
<td>
<asp:DropDownList ID="DDLEdit2" DataSourceID = "LocationEntitySource" runat="server"
DataTextField = "Option_Value" DataValueField = "Option_Value"
SelectedValue='<%#Bind("Building") %>'
AppendDataBoundItems="true">
</asp:DropDownList>
</td>
<br />
</table>
<asp:Button ID="Button2" Text="Submit Changes" runat="server" CommandName="Update" />
<!--<asp:LinkButton ID = "LB1" Text="Update" CommandName="Update" runat="server" /> -->
</EditItemTemplate>
</asp:FormView>
これも同様に機能します。FormView
私が指定OnItemUpdating
した との属性からわかりますOnItemUpdated
。
ここにあるOnItemUpdating
:
protected void FormView1_ItemUpdating(object source, FormViewUpdateEventArgs e)
{
DebugBox.Text = FormView1.DataKey.Value.ToString();
DataAccessLayer.SafetyEntities se = new DataAccessLayer.SafetyEntities();
var key = Convert.ToInt32(FormView1.DataKey.Value.ToString());
DataAccessLayer.Employee employeeToUpdate = se.Employees.Where(emp => emp.EID == key).First();
employeeToUpdate.Name = e.NewValues["Name"].ToString();
employeeToUpdate.Manager = e.NewValues["Manager"].ToString();
employeeToUpdate.Building = e.NewValues["Building"].ToString();
se.SaveChanges();
GridView1.DataBind();
}
これもうまくいきます。アイテムは適切に更新されており、GridView
さわやかです。
ここにあるOnItemUpdated
:
protected void BLAH(object source, FormViewUpdatedEventArgs e)
{
DebugBox2.Text = "BLAH!!!!";
}
そして、ここに問題があります。これは決して呼び出されません!このイベントを発生させるための手順がどこかに欠けていますか? ボタンが Command="Update" を呼び出し、ItemUpdating を起動してから ItemUpdated を起動することを理解していると思いました。間違いなく ItemUpdating を呼び出していますが、それだけです。ItemUpdated を起動するには何か追加が必要ですか?