问题描述
如题
解决方案
解决方案二:
Details无法取到FileUpload中的值,已经两天了。急!!!
解决方案三:
在更新时可以取到DetailsView中的FileUpload,值是却得不到FileUpload的值
解决方案四:
在Inserting或者Updating或其他的事件中的参数:其中成员中包含了DetailView中的新数据,采用如下两种方式可以获得:1.e.Values[index]2.e.Values[keyname]
解决方案五:
我的FileUpload并没有绑定数据源,是在模版列中啊
解决方案六:
贴出我的代码:页面中有一个名为DetailsView1的Details控件,它绑定了一个ObjectDataSource1数据源,绑定了四个字段(TypdID,BigTypeID,TypeName,Explain)。另外还有一个唯一的模版列,该模版列的编辑模版中有一个名为PhotoFileUpload1的文件上传控件。我想实现,在点击DetailsView1的"编辑"命令按钮后,在编辑状态可以编辑模版列中的文件上传控件,然后点击“更新”命令按钮将图片数据通过自定义方法更新到数据库中。****遇到的问题是不在于怎么更新,而是可以触发ItemUpdated事件,并且能够找到DetailsView中的FileUpload1控件,但确总是认为它没有上传文件。而在页面放这么一个上传控件并用不着同样的代码上传文件就没有问题。最重要的错误是竟然在编辑行后(无论是绑定字段,还是模版字段),影响行数为0。下面的我的代码:(有问题处已用//★标记标出)(1)这是DetailsView的定义<asp:DetailsViewID="DetailsView1"runat="server"AutoGenerateRows="False"CellPadding="4"DataSourceID="ObjectDataSource1"ForeColor="#333333"GridLines="None"Height="50px"Width="219px"OnItemUpdated="DetailsView1_ItemUpdated"OnItemCommand="DetailsView1_ItemCommand"DataKeyNames="TypeID"OnDataBound="DetailsView1_DataBound"><FooterStyleBackColor="#507CD1"Font-Bold="True"ForeColor="White"/><CommandRowStyleBackColor="#D1DDF1"Font-Bold="True"/><EditRowStyleBackColor="#2461BF"/><RowStyleBackColor="#EFF3FB"/><PagerStyleBackColor="#2461BF"ForeColor="White"HorizontalAlign="Center"/><Fields><asp:BoundFieldDataField="TypeID"HeaderText="TypeID"SortExpression="TypeID"/><asp:BoundFieldDataField="BigTypeID"HeaderText="BigTypeID"SortExpression="BigTypeID"/><asp:BoundFieldDataField="TypeName"HeaderText="TypeName"SortExpression="TypeName"/><asp:BoundFieldDataField="Explain"HeaderText="Explain"SortExpression="Explain"/><asp:TemplateField><ItemTemplate></ItemTemplate><EditItemTemplate><asp:FileUploadID="FileUpload1"runat="server"/></EditItemTemplate></asp:TemplateField><asp:CommandFieldShowEditButton="True"ShowInsertButton="True"><ItemStyleFont-Bold="True"ForeColor="#C00000"/></asp:CommandField></Fields><FieldHeaderStyleBackColor="#DEE8F5"Font-Bold="True"/><HeaderStyleBackColor="#507CD1"Font-Bold="True"ForeColor="White"/><AlternatingRowStyleBackColor="White"/></asp:DetailsView>(2)这是DetailsView1的ItemUpdated事件protectedvoidDetailsView1_ItemUpdated(objectsender,DetailsViewUpdatedEventArgse){if(e.Exception!=null){Response.Write("<script>alert('"+"发生异常"+"')</script>");//★该行没执行}if(e.AffectedRows<=0){Response.Write("<script>alert('"+"没有编辑任何行"+"')</script>");//★该行竟被执行了(实际上编辑了绑定字段或模版列)}if(e.Exception!=null¦¦e.AffectedRows<=0){lblMessage.Text="在编辑数据时发生错误,请确认所输入之数据的格式是否正确。";e.ExceptionHandled=true;}else{DetailsViewmyDetailsView=(DetailsView)(sender);stringId=Convert.ToString(e.Keys["TypeID"]);FileUploadPhotoFile=(FileUpload)(myDetailsView.Rows[myDetailsView.DataItemIndex].FindControl("FileUpload1"));if(PhotoFile==null){Response.Write("<script>alert('"+"没有找到文件上传控件"+"')</script>");//★该行没执行(找到了FileUpload1)}if(!PhotoFile.HasFile){Response.Write("<script>alert('"+"上传控件没有上传文件"+"')</script>");//★该行被执行了(不知道为什么????)}SmallTypeLogicsmallTypeLogic=newSmallTypeLogic();boolresult=smallTypeLogic.UpdateSmallTypePhotoByID(Id,PhotoFile);if(result){lblMessage.Text="已经成功编辑数据...";}this.UpdatePanel1.Update();}}
解决方案七:
在事件处理中添加如下代码:DetailsViewdv=senderasDetailsView;if(dvisDetailsView){FileUploadfu=dv.FindControl("FileUpload1")asFileUpload;if(fuisFileUpload){//成功获取FileUpload控件的处理逻辑stringfileName=fu.FileName;}}
解决方案八:
有点乱,重新排版后页面中有一个名为DetailsView1的Details控件,它绑定了一个ObjectDataSource1数据源,绑定了四个字段(TypdID,BigTypeID,TypeName,Explain)。另外还有一个唯一的模版列,该模版列的编辑模版中有一个名为PhotoFileUpload1的文件上传控件。我想实现,在点击DetailsView1的"编辑"命令按钮后,在编辑状态可以编辑模版列中的文件上传控件,然后点击“更新”命令按钮将图片数据通过自定义方法更新到数据库中。****遇到的问题是不在于怎么更新,而是可以触发ItemUpdated事件,并且能够找到DetailsView中的FileUpload1控件,但确总是认为它没有上传文件。而在页面放这么一个上传控件并用不着同样的代码上传文件就没有问题。最重要的错误是竟然在编辑行后(无论是绑定字段,还是模版字段),影响行数为0。下面的我的代码:(有问题处已用//★标记标出)(1)这是DetailsView的定义<asp:DetailsViewID="DetailsView1"runat="server"AutoGenerateRows="False"CellPadding="4"DataSourceID="ObjectDataSource1"ForeColor="#333333"GridLines="None"Height="50px"Width="219px"OnItemUpdated="DetailsView1_ItemUpdated"OnItemCommand="DetailsView1_ItemCommand"DataKeyNames="TypeID"OnDataBound="DetailsView1_DataBound"><FooterStyleBackColor="#507CD1"Font-Bold="True"ForeColor="White"/><CommandRowStyleBackColor="#D1DDF1"Font-Bold="True"/><EditRowStyleBackColor="#2461BF"/><RowStyleBackColor="#EFF3FB"/><PagerStyleBackColor="#2461BF"ForeColor="White"HorizontalAlign="Center"/><Fields><asp:BoundFieldDataField="TypeID"HeaderText="TypeID"SortExpression="TypeID"/><asp:BoundFieldDataField="BigTypeID"HeaderText="BigTypeID"SortExpression="BigTypeID"/><asp:BoundFieldDataField="TypeName"HeaderText="TypeName"SortExpression="TypeName"/><asp:BoundFieldDataField="Explain"HeaderText="Explain"SortExpression="Explain"/><asp:TemplateField><ItemTemplate></ItemTemplate><EditItemTemplate><asp:FileUploadID="FileUpload1"runat="server"/></EditItemTemplate></asp:TemplateField><asp:CommandFieldShowEditButton="True"ShowInsertButton="True"><ItemStyleFont-Bold="True"ForeColor="#C00000"/></asp:CommandField></Fields><FieldHeaderStyleBackColor="#DEE8F5"Font-Bold="True"/><HeaderStyleBackColor="#507CD1"Font-Bold="True"ForeColor="White"/><AlternatingRowStyleBackColor="White"/></asp:DetailsView>(2)这是DetailsView1的ItemUpdated事件protectedvoidDetailsView1_ItemUpdated(objectsender,DetailsViewUpdatedEventArgse){if(e.Exception!=null){Response.Write("<script>alert('"+"发生异常"+"')</script>");//★该行没执行}if(e.AffectedRows<=0){Response.Write("<script>alert('"+"没有编辑任何行"+"')</script>");//★该行竟被执行了(实际上编辑了绑定字段或模版列)}if(e.Exception!=null¦¦e.AffectedRows<=0){lblMessage.Text="在编辑数据时发生错误,请确认所输入之数据的格式是否正确。";e.ExceptionHandled=true;}else{DetailsViewmyDetailsView=(DetailsView)(sender);stringId=Convert.ToString(e.Keys["TypeID"]);FileUploadPhotoFile=(FileUpload)(myDetailsView.Rows[myDetailsView.DataItemIndex].FindControl("FileUpload1"));if(PhotoFile==null){Response.Write("<script>alert('"+"没有找到文件上传控件"+"')</script>");//★该行没执行(找到了FileUpload1)}if(!PhotoFile.HasFile){Response.Write("<script>alert('"+"上传控件没有上传文件"+"')</script>");//★该行被执行了(不知道为什么????)}SmallTypeLogicsmallTypeLogic=newSmallTypeLogic();boolresult=smallTypeLogic.UpdateSmallTypePhotoByID(Id,PhotoFile);if(result){lblMessage.Text="已经成功编辑数据...";}this.UpdatePanel1.Update();}}
解决方案九:
if(e.AffectedRows<=0)这个地方是返回在Updating事件之后,执行ObjectDataSource中的Update方法中影响的行数,所以这里你应该检查Update方法是否正确。关于后面FindControl的地方,我试了没有问题,我是这样找的:DetailsViewdv=senderasDetailsView;if(dvisDetailsView){FileUploadfu=dv.FindControl("FileUpload1")asFileUpload;if(fuisFileUpload){stringfileName=fu.FileName;}}HasFile为True.