none
一覧レンダリング中の処理挿入について RRS feed

  • 質問


  • いつもお世話になります。

    データソースを一覧形式で表示するコントロール(GridViewなど)において、
    表示される項目を、動的に変更させる方法はありませんでしょうか。

    要は、一覧のレンダリング中に、一覧に表示する値を変更する処理を
    実行することは、可能なのでしょうか。
    一覧表示のループの中にif文を挿入して、値を変更するイメージです。

    例えば、A列と、ドロップダウンリストを追加したテンプレート列を表示する時に、
    A列の値や、コレクションの要素キーにやして、ドロップダウリストの内容を取得する処理です。

      項目列 | テンプレート列
    -----------------------
      値A   |ドロップダウンリスト(Aをキーに、検索結果を表示)

    ご存知の方がおられれば、教えてください。
    よろしくお願いします。

    2006年7月15日 7:37

回答

  • DataBoundイベントでバインドされるデータを拾ってそこで処理をするのが一般的かと思います。
    ちょっと特殊な例であれば、こんな方法もあります。

    http://dotnetfan.org/blogs/dotnetfanblog/articles/692.aspx

    2006年7月15日 12:55
  • RowDataBoundイベントを使った例です。ここで、SqlDataSource2はDropDownListのDataSourceであり、2行目のみのリストを変えています。
    
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (e.Row.RowIndex == 1)
                ((SqlDataSource)e.Row.FindControl("SqlDataSource2")).SelectCommand
    = "select testcd from test"; } }
    # C#かVB.NETかわからなかったので、C#のコードを載せました。
    2006年7月15日 15:57
    モデレータ

すべての返信

  • DataBoundイベントでバインドされるデータを拾ってそこで処理をするのが一般的かと思います。
    ちょっと特殊な例であれば、こんな方法もあります。

    http://dotnetfan.org/blogs/dotnetfanblog/articles/692.aspx

    2006年7月15日 12:55
  • RowDataBoundイベントを使った例です。ここで、SqlDataSource2はDropDownListのDataSourceであり、2行目のみのリストを変えています。
    
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (e.Row.RowIndex == 1)
                ((SqlDataSource)e.Row.FindControl("SqlDataSource2")).SelectCommand
    = "select testcd from test"; } }
    # C#かVB.NETかわからなかったので、C#のコードを載せました。
    2006年7月15日 15:57
    モデレータ
  • ご回答ありがとうございます。

    今までは、Dummyのコントロールを配置して、
    そのコントロールのEval()メソッドから任意のメソッドを実行していましたが、
    DataBound系のメソッドに切り替えます。ありがとうございました。

    2006年7月17日 5:52