2009-04-27 108 views
0

我有一个显示数据库数据的gridview。数据库将图像文件名(字符串)存储在一个项目中。通过gridview上传图片的问题

我有文件上载控件显示在编辑视图,并上传文件就好了。

问题是,我想更新数据库中的图像文件名,我不知道如何获取数据到gridview控件的gridview用来更新数据库。我已将文字框控件设置为隐藏。这里是ASPX代码:

<asp:TemplateField HeaderText="Image" SortExpression="Image"> 
       <EditItemTemplate> 
        <asp:TextBox ID="txtImage" runat="server" Text='<%# Bind("Image") %>' Visible="False" OnTextChanged="txtImage_TextChanged"></asp:TextBox> 
        <asp:FileUpload ID="FileUpload1" runat="server" /> 
       </EditItemTemplate> 
       <ItemTemplate>       
        <asp:Image ID="Image1" runat="server" Width="50px" AlternateText='<%# Eval("Image") %>' ImageUrl='<%# "images/hardware/" + Eval("Image") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 

这里是存储文件到服务器的功能,以及文件名放到一个变量:

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     GridViewRow row = GridView1.Rows[e.RowIndex]; 
     FileUpload fileUpload = row.Cells[0].FindControl("FileUpload1") as FileUpload; 
     if (fileUpload != null && fileUpload.HasFile) 
     { 
      strFileName = fileUpload.FileName; 
      fileUpload.SaveAs(Server.MapPath("images/hardware/" + strFileName)); 
      TextBox txtImage = row.Cells[0].FindControl("txtImage") as TextBox; 
      txtImage.Text = strFileName; 
     } 
    } 

那么,我该何去何从?我认为这个更新已经发生了或者什么?因为“txtImage.Text”不更新数据库...我在这里或什么地方出了问题?在将它保存到数据库之前,我可以在此函数的文本框中操纵值?感谢您的帮助。

回答

1

如果您在后面的代码中处理更新数据库,您应该能够像在GridView1_RowUpdating中那样获取文件名。只需找到处于编辑模式的网格中的行即可。网格上的行集合中的每一行都有一个RowState属性...您正在寻找DataControlRowState.Edit

+0

没有真正更新后面的代码我不认为......我正在使用数据集的“UpdateQuery”属性来处理更新。 – Kolten 2009-04-27 22:21:32

0

我想我有一个解决方案,但想要输入它是否是编码它的好方法。 我有这样的设置为“更新”事件DataSet的gridview的用途:

 protected void SetRecords(object sender, SqlDataSourceCommandEventArgs e) 
    { 
     if (strFileName != "") 
     { 
      e.Command.Parameters["@Image"].Value = strFileName; 
     } 
    } 

这是好吗?一切似乎都很好......但这是解决问题的好方法吗?我想正确编写代码,而不是从一开始就开始使用错误的代码实践(我是一位成功的经典ASP开发人员,转向C#和ASP.NET) 谢谢大家!