C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ListViewで非表示列


(過去ログ 90 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■53713 / inTopicNo.1)  ListViewで非表示列
  
□投稿者/ ないのね (1回)-(2010/09/25(Sat) 00:28:03)

分類:[ASP.NET (C#)] 

いつもお世話になっています。

VisualStadio2008 を使っての開発をしています。

現状ListViewを使って一覧を一行が複数行になる一覧を作成しているのですが、
その際にユーザによって見える列を制御したくてその方法がわからず悩んでいます。

一覧は下記のようなもので項目2を場合によって非表示にしたいのです。
GridViewであればRowCreateのイベントで列のvisibleをfalseにすれば可能なのは知っているのですが
一覧の性質上GridViewも使えません。
皆様のお力を貸してください

以下、一覧例
______________________
|項 |項 |項目3|項目4|
|   |   |-------------|
|目 |目 |項目5|項目6|
|   |   |-------------|
|1 |2 |項目7|項目8|
-----------------------


引用返信 編集キー/
■53716 / inTopicNo.2)  Re[1]: ListViewで非表示列
□投稿者/ もりお (283回)-(2010/09/25(Sat) 02:35:27)
No53713 (ないのね さん) に返信

> その際にユーザによって見える列を制御したくてその方法がわからず悩んでいます。

一覧の出力形式と言いますか、ItemTemplate にはどのように記述していらっしゃる
のでしょうか。

たとえば、一覧を table タグとして出力する場合。
項目2の td タグにサーバー側からアクセスできるよう runat="server" 属性を
記述して

<ItemTemplate>  
  <table>
    <tr>
      ...
      <td id="twoTd" rowspan="3" runat="server">
        項目2
      </td>
      ...

ItemCreated イベントのハンドラーにて項目2の td コントロールを取得して、
Visible プロパティに false をセットするというやり方があります。

protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
  HtmlTableCell twoTd = (HtmlTableCell)e.Item.FindControl("twoTd");
  twoTd.Visible = false;
}

引用返信 編集キー/
■53721 / inTopicNo.3)  Re[2]: ListViewで非表示列
□投稿者/ ないのね (2回)-(2010/09/25(Sat) 08:49:07)
もりおさん、回答ありがとうございます。


ItemTemplate の記述はもりおさんが書かれているような形

> <ItemTemplate>  
>   <table>
>     <tr>
>       ...
>       <td id="twoTd" rowspan="3" runat="server">
>         項目2
>       </td>
>       ...

これとほぼ同じで、項目2に出力したい内容をバインドしています。

> protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
> {
>   HtmlTableCell twoTd = (HtmlTableCell)e.Item.FindControl("twoTd");
>   twoTd.Visible = false;
> }

上記の記述からみて ItemCreate イベントはItemTemplate の内容が作成されるたびに発生するんですね
この方法を一覧のデータ部分は非表示にできそうです。

ただ、すいません、私の記述が足りていなかったのですが
一覧には一覧例に示した者と同様の形のヘッダがあります。
ヘッダはLayoutTemplate にItemTemplate と同様に

<LayoutTemplate>  
  <table>
    <tr>
      ...
      <td rowspan="3" >
         項目2ヘッダ
      </td>
      ...

このように記述しています。
こちらのtd タグにもrunnat 属性を追加することで、サーバ側でtd コントロールを取得してプロパティをいじることができるのでしょうか?

引用返信 編集キー/
■53723 / inTopicNo.4)  Re[3]: ListViewで非表示列
□投稿者/ もりお (284回)-(2010/09/25(Sat) 09:22:01)
No53721 (ないのね さん) に返信

> こちらのtd タグにもrunnat 属性を追加することで、サーバ側でtd コントロール
> を取得してプロパティをいじることができるのでしょうか?

はい。LayoutTemplate に配置したコントロールは ListView.FindControl メソッド
で取得できるはずです。

ListView.LayoutCreated イベントのハンドラーにて取得するとよいかと思います。

protected void ListView1_LayoutCreated(object sender, EventArgs e)
{
  HtmlTableCell twoHeader = (HtmlTableCell)ListView1.FindControl("twoHeader");
  ...
}

引用返信 編集キー/
■53727 / inTopicNo.5)  Re[4]: ListViewで非表示列
□投稿者/ ないのね (3回)-(2010/09/25(Sat) 10:42:44)
No53723 (もりお さん) に返信
>
> ■No53721 (ないのね さん) に返信
>
>>こちらのtd タグにもrunnat 属性を追加することで、サーバ側でtd コントロール
>>を取得してプロパティをいじることができるのでしょうか?
>
> はい。LayoutTemplate に配置したコントロールは ListView.FindControl メソッド
> で取得できるはずです。
>
> ListView.LayoutCreated イベントのハンドラーにて取得するとよいかと思います。
>
> protected void ListView1_LayoutCreated(object sender, EventArgs e)
> {
> HtmlTableCell twoHeader = (HtmlTableCell)ListView1.FindControl("twoHeader");
> ...
> }
>

さっそくの回答、ありがとうございます。

> ListView.LayoutCreated イベントのハンドラーにて取得するとよいかと思います。

LayoutCreaterというイベントがあったのですね

今目の前に環境があるわけではないのですぐに試せるわけではないのが残念ですが、これでなんとかなりそうです
ありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -