ASP.NET中DetailsView的问题~!折腾几天了实在搞不定了~!
我用一个DetailsView显示数据库数据 并启用了控件自带的 编辑功能,
把所有数据库字段全部转换成模板 然后我在 EditItemTemplate中添加了一个
FileUpLoad控件来实现上传图片功能。
我想实现的是怎么才能把FileUpLoad上传图片时获得的图片名赋值给编辑状态下的TextBox文本框
当点击编辑时更换原有的图片地址。
我的数据库字段是 Id UserName UserImage Telephone
现在编辑功能能够实现但是就是图片地址保存不到数据库中一直都是空值
我的代码如下请各位大大们帮帮我,万分感谢~!
Default.aspx前台
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataKeyNames="Id" DataSourceID="SqlDataSource1" Height="50px"
onitemupdating="DetailsView1_ItemUpdating" Width="388px">
<Fields>
<asp:TemplateField HeaderText="Id" InsertVisible="False" SortExpression="Id">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UserName" SortExpression="UserName">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("UserName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UserImage" SortExpression="UserImage">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserImage") %>'></asp:TextBox>
<asp:FileUpload ID="Upload1" runat="server" />
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserImage") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UserImage") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Telephone" SortExpression="Telephone">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Telephone") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Telephone") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Telephone") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="更新"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="取消"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="编辑"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
Default.aspx.cs后台代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
string Url = (DetailsView1.FindControl("TextBox1") as TextBox).Text;//取得TextBox1的文本值Text
string Up = (DetailsView1.FindControl("Upload1") as FileUpload).FileName; //获取FileUpLoad控件上传图片的名字
string t1 = DateTime.Now.ToString("yyyy-mm-dd-hh-ss");//获取当前时间
string filePath = "~/UserImage/" + t1 + Up;//设置图片的路径,并根据时间重新命名图片名字
if ((DetailsView1.FindControl("Upload1") as FileUpload).HasFile)//判断是否已有上传文件,如果有返回true
{
(DetailsView1.FindControl("Upload1") as FileUpload).SaveAs(MapPath(filePath));//上传并保存文件到服务器
}
Url = filePath;//重新给TextBox1命名
}
}
[解决办法]