0

更新パネル内に保持されているリストビュー コントロールを介してデータを挿入しようとしています。既存のアイテムを表示するために SQL データソースを使用しました。しかし、データを挿入するために、ストアド プロシージャを使用し、ADO.net エンティティ フレームワークを介してそれらを呼び出しています。SQLデータソースに直接挿入コマンドを使用すると、データの挿入が成功した後に挿入モードが閉じますが、ストアドプロシージャを介して挿入を行うと、挿入モードが維持されます(テキストボックスが表示されます)という奇妙な動作が見られます。editindex を -1 に、insertitemposition を none に設定するために、listview_iteminserted を使用しました。しかし、まだ成功していません。以下はコードです...

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <asp:ValidationSummary ID="vsumSaveProject" runat="server" ValidationGroup="vgrpSaveProject" EnableClientScript="true" SkinID="valSummaryError"  DisplayMode="BulletList" HeaderText="Please correct the below errors." CssClass="validation-summary-errors" />
    <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td>
          <asp:ImageButton ID="imgbNew" runat="server"
                           CausesValidation="False"
                           CommandName="New"
                           ImageUrl="../images/listviews/add_icon_mono.gif"
                           ToolTip="Add New"
                           Width="25"
                           onclick="imgbNew_Click" />
        </td>
      </tr>
      <tr>
        <td>
          <asp:ListView ID="lvProjects" runat="server"
                        DataKeyNames="Project_Code"
                        DataSourceID="SQLProjectsDS"
                        onitemcommand="lvProjects_ItemCommand" 
                        oniteminserted="lvProjects_ItemInserted" 
                        onitemcanceling="lvProjects_ItemCanceling" 
                        onitemediting="lvProjects_ItemEditing">

そして、以下のSQL DataSource..

 <asp:SqlDataSource ID="SQLProjectsDS" runat="server"
                    ConnectionString="<%$ ConnectionString %>"
                    SelectCommand="SELECT Projects.Project_Code, Projects.Project_Name, Projects.Project_Area, Projects.Project_Status, Projects.Display_Mask,Projects.Site_ID SiteID, Site_Details.Site_Nm FROM Projects INNER JOIN Site_Details ON Projects.Site_ID = Site_Details.Site_ID" />

そして背後にあるコードは...

private void InsertItemstoDB(parameters.....)
{
  using(entity framework)
  {
    Do Insertions using stored procedure
  }
}

そしてアイテム挿入イベントで

protected void lvProjects_ItemInserted(object sender, ListViewInsertedEventArgs e)
{
    this.CancelAddNew();         
}

private CancelAddNew()
{
  lvProjects.InsertItemPosition = InsertItemPosition.None;
        imgbNew.Enabled = true;
        lvProjects.EditIndex = -1;
}

これは、挿入コマンドを作成して SQLDataSource.InsertCommand に送信した場合と同じコードです。Stored Proc Insert を使用すると、挿入は正常に機能しますが、挿入モードは何も起こらなかったかのように表示されたままになります。ページを更新すると、新しいデータが表示されます。

助けてください。

4

1 に答える 1

0

新しいアイテムを挿入した後、リストビューを再バインドする必要があると思います。つまり、変更に対応するためにリストビューを更新する必要があります。UpdatePanel を使用している場合は、挿入完了後に更新するだけです。

于 2012-08-06T06:38:43.170 に答える