0

我正在尝试通过保存在更新面板中的 listview 控件插入数据。我使用 SQL 数据源来显示现有项目。但是为了插入数据,我使用存储过程并通过 ADO.net 实体框架调用它们。我看到一个奇怪的行为,如果我对 SQLdatasource 使用直接插入命令,插入模式在成功插入数据后关闭,但是当我通过存储过程进行插入时插入模式保持不变(文本框可见)。我甚至使用 listview_iteminserted 将 editindex 设置为 -1 并将 insertitemposition 设置为 none。但仍然没有成功。下面是代码...

<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 数据源如下..

 <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
  }
}

并在 Item Inserted 事件中

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

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

现在,如果我创建插入命令并将其发送到 SQLDataSource.InsertCommand,这就是相同的代码。使用存储过程插入,插入工作正常,但插入模式停留在显示中,就好像什么都没发生一样。刷新页面时会出现新数据。

请帮忙。

4

1 回答 1

0

我想您需要在插入新项目后重新绑定列表视图,即应该刷新它以适应更改。如果您使用的是 UpdatePanel,则可以在插入完成后对其进行更新。

于 2012-08-06T06:38:43.170 回答