- PR -

祝祭日フラグから曜日のセルの色を変える

1
投稿者投稿内容
つちや
会議室デビュー日: 2006/05/09
投稿数: 10
投稿日時: 2006-05-22 11:12
C#2005(Web)のGridViewで予定表を作成しています。
曜日列の祝祭日の日のみセルの色を変えるため。

予定テーブル(日付,曜日)と休日テーブル(日付,休日識別)を持ち
データバインドする前に2つのテーブルを結合し(日付,曜日,休日識別)
以下のようにいています。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
 if (e.Row.RowType == DataControlRowType.DataRow){
 if (e.Row.DataItem != null){
   if (e.Row.Cells[2].Text == "True")  //休日識別(bool)
    {e.Row.Cells[1].BackColor = Color.Red;} //曜日列
  }
 }
}

そして最後に休日を識別する為だけの列を非表示としています。
this.GridView1.Columns[2].Visible = false;

実際には10項目程度同じような方法で特定のセルの色を
変えているのですが、列の表示/非表示を繰り返して行うので
いまいちスマートにおこなえないでいます。
もっと良い方法がありましたらお願いします。


[ メッセージ編集済み 編集者: つちや 編集日時 2006-05-22 11:20 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-22 11:37
引用:

つちやさんの書き込み (2006-05-22 11:12) より:

変えているのですが、列の表示/非表示を繰り返して行うので
いまいちスマートにおこなえないでいます。


スマートかどうかはわからないのですが、表示・非表示を繰り返したくなければ、
休日判定部分を分ける方法もありますよね?
というか、僕ならそうするかな〜(^^;)
つちや
会議室デビュー日: 2006/05/09
投稿数: 10
投稿日時: 2006-05-22 12:01
引用:

R・田中一郎さんの書き込み (2006-05-22 11:37) より:
スマートかどうかはわからないのですが、表示・非表示を繰り返したくなければ、
休日判定部分を分ける方法もありますよね?
というか、僕ならそうするかな〜(^^



"スマート"というのはきっと他の考えかたがあるんだろうな〜
などと思いつつこの方法を使っていたからです。
この方法だと自分でGridViewとDataSourceを適切なタイミング
で連結しないと列が無い条件が発生しエラーとなってしまうのです。

田中さんの判定部分を分ける方法とはどんな方法でしょうか
よろしければ教えていただけますか?

[ メッセージ編集済み 編集者: つちや 編集日時 2006-05-22 12:06 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-22 13:17
引用:

つちやさんの書き込み (2006-05-22 12:01) より:

田中さんの判定部分を分ける方法とはどんな方法でしょうか


元々自信が無い上に、現在著しく自信を無くしているのですが・・・

ひとつのビュー(クエリー?)にまとめたために表示させたくない列ができてしまった訳ですから、単に日付・休日フラグのみの DataTable を取得しておいて、日付をキーにして、そこに聞きにいけばいいんじゃないかな〜、と思ったんです。

つちやさんの方法よりも、ちょっと複雑になりますよね。
なのでスマートかどうかわからないと言ったわけです(^^;
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-05-22 22:18
 『実際には10項目程度同じような方法で特定のセルの色を変えている』というその方法と、つちやさんがイメージされている“スマートな方法”がわからないことには、何とも答えようがないと思います。

 データ バインディングを使用しているなら、Cells.BackColor の値をバインドで解決する方がスマートかもしれません。DataColumn.Expression プロパティを使えば、GridView.RowDataBound イベントをハンドリングする必要もないと思います。
例:IIF (休日識別 = 'True', 'Color.Red', 'Color.White')

 HTML 的には、BackGround 属性をいじるのではなく、CSS のクラス名で解決する方がスマートかも。
つちや
会議室デビュー日: 2006/05/09
投稿数: 10
投稿日時: 2006-05-23 09:12
色々なアプローチがあり大変参考になります。
現在行っている自分の方法が果たして簡易で効果的(・・・曖昧ですね〜)
な方法かどうか知りたかったものですから。

自分的にはDataItemを使用すれば、休日を識別する為だけの列を
わざわざGritViewに追加する必要がないところまでたどり着きました。

DbDataRecord DR = (DbDataRecord)e.Row.DataItem;
if(!DR.GetBoolean(2))
{
e.Row.Cells[1].ForeColor = Color.Red;
}

ただJittaさんのバインドで解決する方法が私の考えていた
スマートな方法に一番近ですので、バインドすることにしました。
ありがとうございます。


1

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