在 GridView 中单击重定向到另一页的行时发送数据

本文关键字:数据 一页 GridView 单击 重定向 | 更新日期: 2023-09-27 18:35:16

我要做的是将照片插入数据库并上传到我的页面前面。首页必须显示名称和照片。我正在从数据库中获取名称以及我在上传的项目文件夹中的所有照片

这是我的首页,其中包含网格视图

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="False" Width="325px" OnRowDataBound="gvSearch_RowDataBound">
        <Columns>
            <asp:TemplateField>
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Text") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Text") %>'></asp:Label>

                </ItemTemplate>
            </asp:TemplateField>
            <asp:ImageField DataImageUrlField="Value" ControlStyle-Height="100" ControlStyle-Width="100"  >
    <ControlStyle Height="100px" Width="100px"></ControlStyle>
            </asp:ImageField>
        </Columns>
    </asp:GridView>

这是我的代码:

    public partial class ListOfItems : System.Web.UI.Page{
    public string ItemImageName, fileName;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Username"] == null)
        {
            //Response.Redirect("Login.aspx?Data=" + "AddItem");
            //Response.Redirect("Login.aspx");
            Response.Cookies.Add(new HttpCookie("returnUrl", Request.Url.PathAndQuery));
            Response.Redirect("Login.aspx");
        }
        string[] filePaths = Directory.GetFiles(Server.MapPath("~/UploadedItems/"));
        List<ListItem> files = new List<ListItem>();
        foreach (string filePath in filePaths)
        {
            fileName = Path.GetFileName(filePath);
            DataSet ds = InsertClass.GetItemName(fileName);
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                ItemImageName = row["ItemName"].ToString();
                files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName));
                //files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName));
            }
            GridView1.DataSource = files;
            GridView1.DataBind();
        }
    }
    protected void gvSearch_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("style", "cursor:pointer;");
            e.Row.Attributes.Add("onclick", "location='ItemPage.aspx?id=" +ItemImageName+ e.Row.Cells[0].Text + "'");
        }
    }
}

好的,让我先解释一下这门课发生了什么,然后我要去上传的项目,然后我使用他们的名字使用关联的 ItemName 查询我的数据库。 现在我的问题是,当我按下照片时,它应该将我带到一个页面,我的网格视图中有我按下的 ItemNameView,但它的作用是发送最后一张图片的名称已添加到网格视图中

在 GridView 中单击重定向到另一页的行时发送数据

foreach (DataRow row in ds.Tables[0].Rows) {
   ItemImageName = row["ItemName"].ToString();
   files.Add(new ListItem(ItemImageName,"~/UploadedItems/" + fileName));
   //files.Add(new ListItem(ItemImageName, "~/UploadedItems/" + fileName));
}

您对此问题的解决方案在这里:-

每次使用 datarow 在数据集内循环时,ItemImageName 都会获得一个较新的值,在最终循环中,您将从数据集中获取上次保存的图像名称,它是一个全局变量,您将在 gridview rowdatabound 事件中为不同图像绑定相同的名称。