RowDataBound イベントでグリッドビューのセルから値を取得する
string percentage = e.Row.Cells[7].Text;
GridViewで動的なことをしようとしているので、RowDataBoundイベントにいくつかのコードを配線しています。TemplateFieldである特定のセルから値を取得しようとしています。しかし、上記のコードは常に空の文字列を返しているようです。
何かアイデアはありませんか?
わかりやすくするために、問題のセルを少し紹介します。
<asp:TemplateField HeaderText="# Percentage click throughs">
<ItemTemplate>
<%# AddPercentClickThroughs((int)Eval("EmailSummary.pLinksClicked"), (int)Eval("NumberOfSends")) %>
</ItemTemplate>
</asp:TemplateField>
これに関連して、誰か行のセルを選択する良い方法を知っていますか?cell[1]と入力するのは最悪です。cell["mycellname"]
とすれば、セルの順番を変更してもバグが出ないのではないでしょうか?
31
3
は、データソースから直接データを引き出すことができます。
テンプレートフィールドを使用し、リテラルテキストをバインドすると、asp.net は実際にコントロールを挿入してくれます。これは DataBoundLiteralControl に挿入されます。これは、デバッガで、空のテキストを取得しているコードの行の近くを見ればわかります。
つまり、コントロールを使うようにテンプレートを変更せずに情報にアクセスするには、次のようにキャストします。
これでテキストが表示されます。
まず、コードを
Label
またはLiteral
コントロールで囲み、適切に参照できるようにする必要があります。テキストに関連するコントロールがないので、システムがそれを追跡する方法がありません。コントロールの内容をviewstateに追加するのはコントロールの責任です。そのためには、gridView.FindControl("controlName");を使って、行内のコントロールを取得する必要があります。そこから
Text
などのプロパティを取得することができます。また、問題の行のDataItemプロパティを取得し、適切なタイプにキャストして、直接情報を抽出することもできます。