- PR -

GridViewの隠し列

1
投稿者投稿内容
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2007-01-04 17:14
お世話になります。
ASP2.0+GridViewについて教えて頂けないでしょうか?

(やりたいこと)
・テーブルの内容をGridViewで一覧表示する。
 仮にテーブルの項目をK1、F1、F2とします。(K1はPrimaryKey)
・選択ボタンと削除ボタンを表示される
・F2の項目は一覧に表示させたくない項目であるが、選択ボタンの
 押下で選択行のF2の値を取得して、他の処理をさせたい
・削除ボタンの押下で選択行のデータを削除させたい
 削除はオプティミスティック同時実行制御とする。

上記の処理をSqlDataSourceやObjectDataSourceで実現したいのですのが
どのように実現したら分からないのです。

(質問1:選択ボタンの処理について)
GridViewの隠し列の実現のためColumns[n].Visible=falseを実行したら列は
表示されないのですが、データ取得する時にデータ無しで返ってきます。
Columns[0].ItemStyle.Width=0もやってみたのですが、隠し列になりません。
どのように実現したら良いのでしょうか?
 
(質問2:削除ボタンの処理について)
オプティミスティック同時実行制御とするためにはテーブルの全ての項目
をGridViewと連携する必要があります。隠し列があったら実現できない
のでしょうか?実現方法があれば教えて下さい。

よろしくお願いします
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-04 17:34
GridViewで非表示のデータを取り出すにはDataKeysにそのデータを入れておくとか
テンプレート化して非表示にしておくとかといった作業が必要のようです。
http://gridviewguy.com/ArticleDetails.aspx?articleID=178

> オプティミスティック同時実行制御とするためにはテーブルの全ての項目
> をGridViewと連携する必要があります。

ウィザードで生成されるソースでは全ての項目についてチェックが行われる、
というだけの話ですね。
隠している項目のデータを上記のような方法で取り出せるのであれば、データの
操作時に隠し項目のデータをデータソースに渡してチェックさせることは
可能だと思います。
また、そもそもこういった同時実行制御の部分はウィザードにたよらず自分で
コントロールしたほうが効率がよい、という話もありますね。
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2007-01-04 20:06
有難うございました
非常に助かりました
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-01-05 05:04
BoundFieldのVisibleプロパティをFalseに設定するとデータがバインドされないため、
GridViewのRowCreatedイベントハンドラでセルのVisibleプロパティをFalseに設定する方法もあります。

コード:
  Protected Sub GridView1_RowCreated(...)
    If e.Row.RowType = DataControlRowType.DataRow _
      OrElse e.Row.RowType = DataControlRowType.Header Then
      e.Row.Cells(3).Visible = False
      e.Row.Cells(4).Visible = False
    End If
  End Sub

  <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName" />
        <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />
        <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" />
        <asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" />
        <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c0}" HeaderText="UnitPrice"
          HtmlEncode="False" >
          <ItemStyle HorizontalAlign="Right" />
        </asp:BoundField>
  </Columns> 



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
1

スキルアップ/キャリアアップ(JOB@IT)