2011-09-23 104 views
0

你好,我尝试添加一个FileUpload一个DetailsView内我在此附上一些地方从我的代码:文件上传里面在编辑模式下的DetailsView

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="586px" 
     DefaultMode="Edit" AutoGenerateRows="False" BorderColor="White" 
     BorderStyle="None" DataSourceID="EntityDataSource1" GridLines="None" DataKeyNames="UserName" OnItemUpdated="DetailsView1_ItemUpdated" ONItemEditing="DetailsView1_ItemEditing"> 

然后FileUpload控件放在模板领域内:

<asp:TemplateField HeaderText="Foto"> 
         <EditItemTemplate> 


<asp:FileUpload ID="FileUpload1" runat="server" /> 
         </EditItemTemplate> 
    </asp:TemplateField> 

和数据源是:

<asp:EntityDataSource ID="EntityDataSource1" runat="server" 
     ConnectionString="name=mesteriEntities" DefaultContainerName="mesteriEntities" 
     EnableFlattening="False" EntitySetName="Users" 
     EnableUpdate="True" AutoGenerateWhereClause="True" 
    EnableInsert="True"> 
     <WhereParameters> 
     <asp:SessionParameter Name="UserName" SessionField="New" Type="String" /> 
     </WhereParameters> 
    </asp:EntityDataSource> 

后面的代码:

protected void DetailsView1_ItemEditing(object sender, DetailsViewInsertEventArgs e) 
    { 
     FileUpload fu1 = (FileUpload)DetailsView1.FindControl("FileUpload1"); 
     if (fu1 == null) 
      e.Cancel = true; 
     if (fu1.HasFile) 
     { 
      try 
      { 
       string fileName = Guid.NewGuid().ToString(); 
       string virtualFolder = "~/UserPics/"; 
       string physicalFolder = Server.MapPath(virtualFolder); 
       // StatusLabel.Text = "Upload status: File uploaded!"; 
       string extension = System.IO.Path.GetExtension(fu1.FileName); 
       fu1.SaveAs(System.IO.Path.Combine(physicalFolder, fileName + extension)); 
       e.Values["foto"] = System.IO.Path.Combine(physicalFolder, fileName + extension); 
      } 
      catch (Exception ex) 
      { 
       Response.Write(ex.Message); 
      } 
     } 
     else 
      e.Cancel = true; 



    } 

我不知道为什么不起作用。它不会上传服务器上的文件,也不会在文件的数据库中添加引用。我在这里做错了吗?

谢谢

回答

2

据我可以告诉(从看类的文档:DetailsView Class)没有OnItemEditing事件来处理?

然而,有一个DetailsView.ItemUpdating事件,这看起来可能做的伎俩:

DetailsView控件内的更新按钮被点击时发生, 但更新操作之前。

此外,我认为无法找到FileUpload控件,因为FindControl方法没有搜索它包含的控件的完整层次结构。

尝试使用下面的方法和修改代码如下所示:

FileUpload fu1 = (FileUpload)FindControl(DetailsView1, "FileUpload1"); 

... 

private Control FindControl(Control parent, string id) 
{ 
    foreach (Control child in parent.Controls) 
    { 
     string childId = string.Empty; 
     if (child.ID != null) 
     { 
      childId = child.ID; 
     } 

     if (childId.ToLower() == id.ToLower()) 
     { 
      return child; 
     } 
     else 
     { 
      if (child.HasControls()) 
      { 
       Control response = FindControl(child, id); 
       if (response != null) 
        return response; 
      } 
     } 
    } 

    return null; 
} 
+0

谢谢!我不在乎看到他/她发布了什么。 – adatapost

+0

谢谢..补充仍然不工作,我应该挖掘更多...我是.net初学者。 – Teodor

+0

正在工作..非常感谢你! – Teodor

相关问题