2017-09-22 19 views
0

これは非常にシンプルなものですが、私はこれを長年にわたって固執しています。 私はデータテーブルを作成し、データをgridviewに持っていました。 Great Sheet_idをクリック可能にしました。クリックすると新しいページが表示されます。 しかし私は他のSQLクエリのためにそれを使用するために私がgridviewから選択したsheet_idを取得したい。グリッドビューから新しいページへのデータの受け渡し

リンクボタンを使用して、あるページから別のページにそのsheet_idを渡すにはどうすればよいですか。

これはこれは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(); 
    } 
にデータを取得したいページです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> 

です

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; 
     } 
} 

は、私はいくつかの例を見ていたけど、私は本当に理解してないと思うSQL

からプルするつもりです次のクエリのためにそれを使用するbeableにIDを使用していました。どんな提案も素晴らしいでしょう。ありがとう!

+1

grdSheet_RowCommand()で適切なURL解析文字列が見つからないと思います。たぶん "SheetDetail.aspx?SheetID =" + ...etc. – Fandango68

+0

eExistingSheetQuery()は何をしているのですか?それは本当にデータソースを返すのですか?そうでなければ、それは別の問題です。 – Fandango68

+0

@ Fandango68こんにちは、私はそれを追加しました。このシートにはこの機能が使用されています – phan

答えて

0

GridViewから別のページにデータを渡す方法はありますか?

ループ機構を使用して、ソースGridviewをループして宛先GridViewにコピーすることをお勧めします。最初にシングルページで作業してください。つまり、GridViewからGridViewです。

たとえば、トリガーが必要です。あなたはこれが、あなたのように動作するように取得したらここでボタンのトリガーは、データを取得することです...

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にデータを渡す方法を見つけます。

1つのアプローチは、SessionState []を使用することです。 Here

概念は、基本的に、SessionStateまたはViewStateであるメモリにデータを渡し、そのデータをPageLoad()イベントを介して受信ページから取得することです。または、データを一時表に保存し、標準のDataSource属性を使用して新しいページに再度リロードします。

hereおよびhere

関連する問題