.NET TIPS

[ASP.NET]DataGridコントロールで特定の行や文字を強調するには?

デジタルアドバンテージ
2003/11/21

 DataGridコントロールでデータの一覧を表示するとき、特定のデータを含んだ行や特定の文字列を強調表示したい場合がある。

 例えば次のサンプル・プログラムの実行画面では、「タイトル」列の項目に「.NET TIPS」が含まれる行については行の背景色をピンク色にし、さらにグリッド内のすべてのセルについて「.NET」という文字列の背景色を黄色にして強調表示している。

特定の行と文字を強調するサンプル・プログラム(highlightdg.aspx)
このプログラムでは「タイトル」列の項目に「.NET TIPS」という文字列が含まれている場合にはその行の背景色をピンク色にし、すべての「.NET」という文字列の背景色を黄色にして強調表示している。

 このようなグリッドの内容に従った行やテキストの修正は、データ連結後にのみ可能だ。ここではItemDataBoundイベントを利用して、各行がデータ連結されるときに、その行に含まれている文字列を調べて行のプロパティを変更したり、文字列を置き換えたりしている。ItemDataBoundイベントの処理については「[ASP.NET]DataGridコントロールですべての行にアクセスするには?」や「[ASP.NET]DataGridコントロールでマウスのある行を強調表示するには?」で解説しているので、そちらを参考にしていただきたい。

 プログラムのソース・コードは次のようになっている。なお、このプログラムは、「TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?」で示したサンプル・プログラム(bounddg2.aspx)をベースにしている。

<%@ Page Language="C#" EnableViewState="false" %>
<%@ Import Namespace="System.Data" %>

<html>
<head>
  <script runat="server">
    void Page_Load(object sender, EventArgs e) {
      DataSet ds = new DataSet();
      ds.ReadXml("http://www.buildinsider.net/rss");

      MyGrid.DataSource = ds.Tables["item"];
      MyGrid.DataBind();
    }

    void MyGrid_ItemBound(object sender, DataGridItemEventArgs e) {
      if (e.Item.ItemType == ListItemType.Item
          || e.Item.ItemType == ListItemType.AlternatingItem) {

        if (e.Item.Cells[0].Text.IndexOf(".NET TIPS") != -1) {
          e.Item.BackColor = System.Drawing.Color.Pink;
        }
        foreach (TableCell cell in e.Item.Cells) {
          cell.Text = cell.Text.Replace(".NET",
            "<B Style='background-color:yellow'>.NET</B>");
        }

      }
    }
  </script>
</head>

<body>
  <form runat="server">
    <asp:DataGrid id="MyGrid"
        OnItemDataBound="MyGrid_ItemBound"
        AutoGenerateColumns="false"
        CellPadding="4"
        runat="server" >

      <HeaderStyle BackColor="#BB2255" ForeColor="white" />
      <ItemStyle   BackColor="#FFEEEE" />
      <AlternatingItemStyle BackColor="#FFDDDD" />

      <Columns>
        <asp:BoundColumn
            DataField="title" HeaderText="タイトル" />
        <asp:BoundColumn
            DataField="encoded" HeaderText="概要" />
      </Columns>

    </asp:DataGrid>
  </form>
</body>
</html>
特定の行と文字を強調するC#のサンプル・プログラム(highlightdg.aspx)

 ItemDataBoundイベントのイベント・ハンドラであるMyGrid_ItemBoundメソッドでは、まず「.NET TIPS」という文字列が第1列に含まれている場合に、行(ここではe.Item)のBackColorプロパティにより背景色を変更する。

if (e.Item.Cells[0].Text.IndexOf(".NET TIPS") != -1) {
  e.Item.BackColor = System.Drawing.Color.Pink;
}

 Stringクラス(System名前空間)のIndexOfメソッドは、パラメータで指定した文字列の、そのインスタンス(ここではセルのTextプロパティ)内での位置を取得するためのものだ。このメソッドは、文字列が含まれていない場合には-1を返す。

 また、「.NET」という文字列の背景色の変更は次のようにして行っている。

foreach (TableCell cell in e.Item.Cells) {
  cell.Text = cell.Text.Replace(".NET",
    "<B Style='background-color:yellow'>.NET</B>");
}

 これは、行に含まれているすべてのセルに対して、そのTextプロパティの「.NET」という文字列を次のような文字列に置き換える。

<B Style='background-color:yellow'>.NET</B>

 StringクラスのReplaceメソッドでは、文字列内の一部を別の文字列に置き換えることができる。このメソッドは、そのインスタンス(ここではcell.Text)に第1パラメータで指定した文字列が含まれている場合には、それを第2パラメータで指定した文字列に置き換えた文字列を返す。End of Article

カテゴリ:Webフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
関連TIPS:[ASP.NET]DataGridコントロールですべての行にアクセスするには?
関連TIPS:[ASP.NET]DataGridコントロールでマウスのある行を強調表示するには?
関連TIPS:[ASP.NET]DataGridコントロールで特定のカラムのみを表示するには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールですべての行にアクセスするには?
[ASP.NET]DataGridコントロールの各セルにアクセスするには?
[ASP.NET]DataGridコントロールでマウスのある行を強調表示するには?
[ASP.NET]DataGridコントロールのヘッダーを複数行にするには?
文字列から特定の文字列を取り除くには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間