2012-08-06 42 views
0

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

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

并且在条目插入事件

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

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

现在这是山姆e代码,如果我创建插入命令并将其发送到SQLDataSource.InsertCommand,它的工作原理。使用存储的Proc插入,插入工作正常,但插入模式保持在显示中,就好像什么也没有发生一样。在刷新页面时出现新数据。

请帮助。

+0

在挣扎了很多之后,我不得不通过设置 SQLDataSource.InsertCommand来解决插入查询的问题。 魔术般地使用SQLDatasource Insert解决了这个问题。我围绕着它工作,但仍然在寻找答案,为什么它不会受到这种限制。 – djSmart 2012-08-07 10:59:01

回答

0

我想你需要在插入一个新项目后重新绑定列表视图,也就是说它应该被刷新以适应变化。如果您使用UpdatePanel,则可以在插入强制条件后对其进行更新。

+0

嗨,感谢您的回复。我试过了,但没有奏效。 :-( – djSmart 2012-08-06 14:21:00