如何在一个帖子ID下的网格视图中显示我的数据库中的多个图像?

时间:2014-07-31 13:35:26

标签: c# asp.net image gridview file-upload

我正在博客网站上工作。当前功能允许用户上传照片(使用fileUpload控件)作为其帖子的一部分(每个帖子都附有唯一的帖子ID)。但是,用户每个帖子只能上传一张照片。我试图让它们上传多个图像,并在gridview中的一个帖子中看到所有图像。用户将按CTRL +点击他们想要上传的图像"浏览'在fileUpload控件上。在这种情况下,我使用下面的代码成功地将每个选定的图像插入到一个帖子ID下的数据库中。

   if (imageUpload.HasFiles)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        HttpPostedFile file;

        SqlCommand maxMessId = new SqlCommand("SELECT Max(MessageID) FROM BlogMessages", conn);
        lastMessageID = Convert.ToInt32(maxMessId.ExecuteScalar());

        foreach (var uploadedFile in imageUpload.PostedFiles)
        {
            file = uploadedFile; 
            MemoryStream ms = new MemoryStream();
            file.InputStream.CopyTo(ms);
            byte[] byts = ms.ToArray();
            ms.Dispose();

            SqlCommand cmdInsertImage = new SqlCommand("INSERT INTO BlogImages(Image, MessageID) VALUES (@Image, @MessageID)", conn);
            cmdInsertImage.Parameters.AddWithValue("@Image", SqlDbType.Image).Value = byts;
            cmdInsertImage.Parameters.AddWithValue("@MessageID", lastMessageID);
            cmdInsertImage.ExecuteNonQuery();
            byts = null;
            cmdInsertImage = null; 


        }

    }

所以我要做的第一件事就是工作,但我遇到的问题是,一旦发布了' Post'单击按钮。目前,它只显示其中一个图像,即fileUpload中所选图像列表中的第一个图像。我当前的代码作为imageHandler类的一部分:

try
{
    int messageid = Convert.ToInt32(context.Request.QueryString["mid"]);

    //SqlCommand command = new SqlCommand("SELECT Image from BlogMessages WHERE Image IS NOT NULL AND MessageID=" + messageid, conn);

    SqlDataAdapter sda = new SqlDataAdapter("SELECT Image from BlogImages WHERE Image IS NOT NULL AND MessageID=" + messageid, conn);
    DataTable data = new DataTable();
    sda.Fill(data);


    if (data != null)
    {
        for (int i=0; i < data.Rows.Count; i++)
        {


            Byte[] bytes = (Byte[])data.Rows[i]["Image"];
            context.Response.Buffer = true;
            context.Response.Charset = "";
            //context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            //context.Response.AddHeader("content-disposition", "attachment;filename="
            //+ data.Rows[0]["Name"].ToString());
            context.Response.BinaryWrite(bytes);

        }
            context.Response.Flush();
            context.Response.End();
    }
}

有关如何显示插入数据库的所有图像的任何建议吗?谢谢!

Gridview定义:

<asp:GridView ID="gvPosts" runat="server" AutoGenerateColumns="False" DataKeyNames="MessageID" GridLines="Vertical" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" Width="693px"
        OnPageIndexChanging="gvPosts_PageIndexChanging" OnRowEditing="gvPosts_RowEditing"
        OnRowCancelingEdit="gvPosts_RowCancelingEdit" OnRowUpdating="gvPosts_RowUpdating" AllowPaging="True">
        <AlternatingRowStyle BackColor="#CCCCCC" />
        <Columns>
            <asp:TemplateField HeaderText="Posts" HeaderStyle-Font-Size="Larger">
                <EditItemTemplate>
                    <asp:TextBox ID="tbGridTitle" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:TextBox>
                    <div style="margin-left: 20px">
                        <p>
                            <asp:TextBox ID="tbGridAuthor" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:TextBox>
                            <asp:Label ID="lblDate" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
                            <asp:Label ID="lblEditIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
                            <%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
                        </p>
                    </div>
                    <div style="margin-left: 40px">
                        <asp:TextBox ID="tbGridMessage" runat="server" Text='<%# Bind("Message") %>' TextMode="MultiLine" Width="450px" Height="200px"></asp:TextBox>
                        <div>
                            <asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" />
                            <asp:Image ID="Image1" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" />
                         </div> 


                    </div>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("Title") %>' Font-Bold="true" Font-Size="Large" ForeColor="#cc0000"></asp:Label>
                    <div style="margin-left: 20px">
                        <p>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Author") %>' Font-Bold="true" Font-Size="Small" Width="150px"></asp:Label>
                            <asp:Label ID="Label2" runat="server" Text='<%# Bind("Date","{0:MM/dd/yyyy}") %>' Font-Bold="true" Font-Size="Small" Width="100px"></asp:Label>
                            <asp:Label ID="lblGridIPAddress" runat="server" Text='<%# Bind("IPAddress") %>' Font-Bold="true" Font-Size="Small" Width="100px" Visible="false"></asp:Label>
                            <%--<asp:Label ID="lblMID" runat="server" Text='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>'></asp:Label>--%>
                        </p>
                    </div>
                    <div style="margin-left: 40px">
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("Message") %>'></asp:Label>
                        <div>
                            <%--<asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID") %>' Width="400px" AlternateText="No Image" ImageAlign="Middle" Visible="false" />--%>
                            <asp:Image ID="postImage" runat="server" ImageUrl='<%# "ImageHandler.ashx?mid="+ Eval("MessageID")%>' Width="400px" AlternateText="No Image" ImageAlign="Middle" Visible="false" />
                        </div>
                    </div>
                </ItemTemplate>
                <HeaderStyle Font-Size="Large" />
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton runat="server" Text="View Comments" OnClick="lbViewComments_Click"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="MessageID" SortExpression="MessageID" Visible="false">
                <ItemTemplate>
                    <asp:Label ID="lblMessageID" runat="server" Text='<%# Bind("MessageID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField ShowHeader="False" Visible="False">
                <EditItemTemplate>
                    <asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
                    &nbsp;<asp:LinkButton ID="lbCancel" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField ShowHeader="False" Visible="False">
                <ItemTemplate>
                    <asp:LinkButton ID="lbDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" OnClick="lbDelete_Click"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#CCCCCC" />
        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#808080" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#383838" />
    </asp:GridView>

0 个答案:

没有答案