2017-12-20 8 views
0

私はドロップダウンとグリッドビューを持っています。ドロップダウンで選択した値に応じて、gridviewの第1列に指定されたハイパーリンクのNaviagetURLを更新します。だから私は動的にハイパーリンクのnavigateurlを更新するonRowDataBound関数を使用しています。そして、私はOnRowDataBound関数内のクエリ文字列として使用するために、最初の列 "ID"の値を取得しようとしていますが、私はこの作業を取得することができません。OnRowDataBound関数で特定の列の値を取得する方法は?

最初の列のハイパーリンクをクリックすると、クエリ文字列には変数IDに値が割り当てられません。したがって、URLは単にhttp://localhost/JobCosting/EditSavedTicket.aspx?ID=

に解決されます。ハイパーリンクをクリックすると開くURLは、クエリ文字列の変数IDに割り当てられた第1列に指定された値を持つ必要があります。 e.Row.Cells [1] .Textまたはe.Row.Cells [2] .Textを使用すると、列値が正しく取得されていますが、取得されていない列0の値が必要です。

<asp:GridView ID="GridView2" runat="server" AllowSorting="True" 
AutoGenerateColumns="False" DataSourceID="Saved_Work" OnRowDataBound="update_url" 
Style="float: left; font-size: small; position: relative; 
      width: 82%; position: relative; top: -10px; height: 40px; font-size: small; text-align: left; 
      left: 30px;" align="left"> 
      <Columns> 
       <asp:TemplateField HeaderText="ID"> 
        <ItemTemplate> 
         <asp:HyperLink ID="Continue_SavedWork" runat="server" NavigateUrl='<%# Eval("ID", "~/EditSavedJob.aspx?ID={0}") %>' 
          Text='<%# Eval("ID") %>'></asp:HyperLink> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="UserID" HeaderText="User" SortExpression="UserID" /> 
       <asp:BoundField DataField="Date_Created" HeaderText="Last_Updated_On" SortExpression="Date_Created" /> 
      </Columns> 
     </asp:GridView> 

コード後ろ:私はe.Row.Cells [0]の.textある文字列IDの長さをチェックすると、それはゼロ

GridViewのある

protected void update_url(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //string NavigateUrl="<%# Eval('ID', 'EditSavedTicket.aspx?ID={0}) %>"; 
     string id = e.Row.Cells[0].Text; 
     HyperLink hp = (HyperLink)e.Row.FindControl("Continue_SavedWork"); 
     if (SavedWorkDD.SelectedValue.ToString() == "Tickets") 
      hp.NavigateUrl = string.Format("EditSavedTicket.aspx?ID={0}", id); 
    } 
} 
+0

何が問題なのですか?何が起こるのですか? –

+0

こんにちは@MarkMiller、私はポストを更新しました。 –

+0

なぜOnRowDataBoundイベントハンドラが必要ですか?イベントハンドラを削除すると、データバインディングによってURLが期待どおりに設定されます。 – Markus

答えて

0

最初の列のテキストにアクセスできない理由は、それがテンプレート列で、他の列がBoundField列であるということです。

コントロールからテキストを取得する代わりに、OnRowUpdatedイベントハンドラのDataItemにアクセスすることができます。たとえば、あなたがたDataTableに結合されている場合、あなたはこのようDataRowViewアクセスすることができます。

protected void update_url(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    var row = (DataRowView)e.Row.DataItem; 
    var id = (int)row["ID"]; 
    // ... 
    } 
} 

をこのアプローチは、コントロールを見つけようとし、その値にアクセスするよりも依存しています。 UIを変更しても引き続き動作します。

+0

それは仕事をしました。本当にありがとうMarkus :) –

関連する問題