通过gridview问题上传图片

时间:2009-04-27 20:17:15

标签: asp.net image gridview file-upload

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

我在EDIT视图中显示了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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为我有一个解决方案,但是想知道这是否是一种很好的编码方式。 我将此设置作为gridview使用的数据集的“正在更新”事件:

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

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