【问题标题】:Image upload via gridview question通过gridview问题上传图片
【发布时间】:2010-10-22 03:50:48
【问题描述】:

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

我在 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”没有更新数据库……我是不是在这里出了问题?我可以在此函数的文本框中操作值,然后再将其保存到数据库中,对吗?感谢您对此的帮助。

【问题讨论】:

    标签: asp.net image gridview file-upload


    【解决方案1】:

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

    【讨论】:

    • 我不认为后面的代码中没有真正更新...我正在使用数据集的“UpdateQuery”属性来处理更新。
    • 您下面的答案看起来不错,当您无法通过挂钩数据源事件将它们的值添加到更新集合中的两种方式绑定元素时
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 2011-04-23
      相关资源
      最近更新 更多