0

C#コードビハインドでデータをバインドしたカスタムグリッドがあります。自分の列の1つにハイパーリンクフィールドを指定しました。ハイパーリンク値をクリックすると、そのハイパーリンク値の詳細ページに移動するはずです。コードを以下に示します。

  protected void grd_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink myLink = new HyperLink();
            myLink.Text = e.Row.Cells[2].Text;
            e.Row.Cells[2].Controls.Add(myLink);
            myLink.NavigateUrl = "Estimation.aspx?EstimateID=" + EstimateID + "&VersionNo=" + VersionNo;
        }
    }

リンクをクリックすると、ページはナビゲートされますが、そのページにすでにプリロードされている詳細が表示されません。これを組み込む方法について提案をお願いします。ありがとう

4

4 に答える 4

0

グリッド行データEstimateIDとの間で値をフェッチする必要があります。GridViewRowEventArgsVersionNoのドキュメントを見ると、.Row プロパティがあることがわかります。

したがって、コードは次のようにする必要があります。

myLink.NavigateUrl = "Estimation.aspx?EstimateID=" + e.Row.Cells[4].Text + "&VersionNo=" + e.Row.Cells[5].Text;

または、グリッド行に関連付けられたデータ項目にアクセスする必要がある場合があります。その場合は、e.Row.DataItem、GridViewRow.DataItem プロパティを参照してください。この DataItem は、グリッドからデータをフェッチするために、グリッドにバインドしたデータのタイプにキャストする必要があります。次のようになります。

((MyCustomDataRow)e.Row.DataItem).EstimateID
于 2013-02-01T07:27:10.153 に答える
0

以下の解決策を試してください:

あなたのリストページであるPage-1:ASPXコード:

<asp:GridView ID="GridView1" runat="server" 
        onrowdatabound="GridView1_RowDataBound">
    <Columns>
    <asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server">HyperLink</asp:HyperLink>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

コードビハインド:

protected void Page_Load(object sender, EventArgs e)
    {
        List<Data> lstData = new List<Data>();
        for (int index = 0; index < 10; index++)
        {
            Data objData = new Data();
            objData.EstimateID = index;
            objData.VersionNo = "VersionNo" + index;
            lstData.Add(objData);
        }

        GridView1.DataSource = lstData;
        GridView1.DataBind();
    }

    public class Data
    {
        public int EstimateID { get; set; }
        public string VersionNo { get; set; }
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink HyperLink1 = e.Row.FindControl("HyperLink1") as HyperLink;
            HyperLink1.NavigateUrl = "Details.aspx?EstimateID=" + e.Row.Cells[1].Text + "&VersionNo=" + e.Row.Cells[2].Text;
        }
    }

あなたの詳細ページであるPage-2:コードビハインド:

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Request.QueryString["EstimateID"].ToString());
        Response.Write(Request.QueryString["VersionNo"].ToString());
    }
于 2013-02-01T07:51:26.250 に答える