代码之家  ›  专栏  ›  技术社区  ›  Kolten

通过GridView问题上传图像

  •  0
  • Kolten  · 技术社区  · 16 年前

    我有一个显示数据库数据的网格视图。数据库存储项目的图像文件名(字符串)以及其他内容。

    我在编辑视图中显示了fileupload控件,它可以很好地上载文件。

    问题是,我想更新数据库中的图像文件名,我不确定如何将数据获取到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”不更新数据库…我是这里出了毛病还是什么事?我可以在这个函数保存到数据库之前操作文本框中的值,对吗?谢谢你在这方面的帮助。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jon    16 年前

    如果在代码隐藏中处理数据库更新,则应该能够像在GridView1_rowUpdating中那样获取文件名。只需在网格中找到处于编辑模式的行。网格上Rows集合中的每一行都有RowState属性…您正在查找的DataControlRowState.Edit

        2
  •  0
  •   Kolten    16 年前

    我想我有一个解决方案,但想输入这是否是一个好的编码方式。 我将此设置作为GridView使用的数据集的“更新”事件:

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

    这样可以吗?一切似乎都很好…但这是解决问题的好方法吗?我想正确地编码,而不是从一开始就开始坏的编码实践(我是一个成功的典型ASP开发人员,正在转向C和ASP.NET) 谢谢大家!