【问题标题】:Passing of data from gridview to a new page将数据从 gridview 传递到新页面
【发布时间】:2017-09-22 14:08:17
【问题描述】:

这是一件非常简单的事情,但我已经坚持了很长时间。 所以我创建了一个数据表并将数据放到一个gridview上。伟大的 使 Sheet_id 可点击,当点击它时,我将直接进入一个新页面。 但是我想获取我从 gridview 中选择的 sheet_id 以便将其用于其他 sql 查询。

如何使用链接按钮将该 sheet_id 从一个页面传递到另一个页面。

这是 ExistingSheet.aspx

<asp:GridView ID="grdSheet" runat="server" AutoGenerateColumns="False"
    CssClass="tablesorter table table-bordered table-hover table-striped tblCtr"
    >
    <Columns>
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:Label ID="hdnSheetId" runat="server" Text='<%# Eval("SNO")%>'> </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Sheet ID">
            <ItemTemplate>
                <asp:LinkButton runat="server" ID="sheetId" CommandName="sheet_id" CommandArgument='<%# Eval( "sheet_id")%>' Text='<%# Eval( "sheet_id")%>' OnClick="" PostBackUrl="~/SheetDetail.aspx">
                </asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>

这是 ExistingSheet.aspx.cs

 protected void grdSheet_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Response.Redirect("SheetDetail.aspx" + e.CommandArgument);
    }

这是我想要获取数据到 SheetDetail.aspx.cs 的页面

  public void FillGridSheet()
    {
        eExistingSheetQuery existingSheetQuery = new eExistingSheetQuery();
        grdSheetDetail.DataSource = existingSheetQuery.DisplayReportSheet(**SHEET ID TO BE PLACED HERE**);
        grdSheetDetail.DataBind();
    }

这是 eExistingSheetQuery.cs

 public DataTable DisplayReportSheet(string sheetId)
{
       try
    {

    conn = new SqlConnection(estocktake);
    conn.Open();

    DataTable dtd = new DataTable();
    GridView gvd = new GridView();

    cmds = new SqlCommand("Select ROW_NUMBER( ) OVER (order by sheet_id)  as SNO, csd.Barcode, csd.ItemId, pm.Description, csd.Quantity " +
                "from CountSheetDetails csd " +
                "join ProductMaster pm on pm.Barcode = csd.Barcode and pm.ItemId = csd.ItemId " +
                "where csd.SheetId = '" + sheetId + "' and pm.Status ='A';",conn);
    adpt = new SqlDataAdapter();

    adpt.SelectCommand = cmds;

    cmds.ExecuteNonQuery();
    adpt.Fill(dtd);
    conn.Close();
    conn.Dispose();

    for (int i = 0; i < dtd.Rows.Count; i++)
    {
        dtd.Rows[i]["SNO"] = i + 1;
    }
    return dtd;
    }
       catch (Exception)
       {
           conn.Close();
           conn.Dispose();
           return null;
       }
}

我想使用 id 来将它用于我将从 SQL 中提取的下一个查询

我看过一些例子,但我不认为我真的明白。任何建议都会很棒。谢谢!

【问题讨论】:

  • 我认为您在 grdSheet_RowCommand() 中缺少正确的 URL 解析字符串。也许“SheetDetail.aspx?SheetID="+...等
  • 还提供与此相关的所有代码,以便我们可以更好地帮助您 - eExistingSheetQuery() 有什么作用?它真的会返回一个数据源吗?如果没有,那就是另一个问题了。
  • @Fandango68 嗨,先生,我添加了它,并且 sheetid 用于此功能

标签: c# asp.net gridview


【解决方案1】:

我认为您要问的是一种将数据从一个 GridView 传递到另一个但在不同页面上的方法?

使用循环机制,我建议您循环访问源 Gridview 并将它们复制到目标 GridView。首先让它在单页上运行 - 即GridViewGridView

例如,您需要一个触发器。这是一个获取数据的 Button 触发器...

GridView1 = 你的源 GridView

GridView2 = 你的目标 GridView

protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        DataRow dr;

        dt.Columns.Add(new DataColumn("ColumnName1"));
        dt.Columns.Add(new DataColumn("ColumnName2"));
        dt.Columns.Add(new DataColumn("ColumnName3"));

        foreach (GridViewRow gvr in GridView1.Rows)
        {            
            if (((CheckBox)gvr.Cells[4].FindControl("CheckBox")).Checked == true)
            {
                dr = dt.NewRow();
                dr["ColumnName1"] = ((Label)gvr.Cells[0].FindControl("Label")).Text;
                dr["ColumnName2"] = ((Label)gvr.Cells[1].FindControl("Label")).Text;
                dr["ColumnName3"] = ((Label)gvr.Cells[2].FindControl("Label")).Text;
                dt.Rows.Add(dr);
            }
        }

        foreach (GridViewRow gvr in GridView2.Rows)
        {
            dr = dt.NewRow();
            dr["ColumnName1"] = ((Label)gvr.Cells[0].FindControl("Label")).Text;
            dr["ColumnName2"] = ((Label)gvr.Cells[1].FindControl("Label")).Text;
            dr["ColumnName3"] = ((Label)gvr.Cells[2].FindControl("Label")).Text;
            dt.Rows.Add(dr);
        }

        GridView2.DataSource = dt;
        GridView2.DataBind();
    }

一旦您完成这项工作,按照您的方式,然后我们会弄清楚如何跨不同的 Web URL 传递数据。

一种方法是使用 SessionState[]。 Here.

这个概念基本上是关于将数据传递到内存中,即 SessionState 或 ViewState,然后通过它的 PageLoad() 事件从接收页面检索该数据。或者,您将数据保存到临时表中,然后使用标准 DataSource 属性将其重新加载到新页面。

例如herehere

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多