DOBON.NET DOBON.NETプログラミング掲示板過去ログ

GridViewのRow動的追加+Fieldスタイル変更

環境/言語:[ASP.NET 2005]
分類:[ASP.NET]


お世話になります。

GridViewのRow動的追加+Fieldスタイル変更

ASP.NET 2005で使用できるGridViewに
SQLのSelect結果をInsert&背景色・フォント位置などの設定
をする処理を作っています。

SQLのSelect結果のGridViewへの
Insertは、以下のような処理で出来ました

DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn ("Field1", System.Type.GetType("System.String"));
dt.Columns.Add(new DataColumn ("Field2", System.Type.GetType("System.String"));
dt.Columns.Add(new DataColumn ("Field3", System.Type.GetType("System.String"));
dt.Columns.Add(new DataColumn ("Field4", System.Type.GetType("System.String"));

SqlDataReader sqldr = sqlcmd.ExecuteReader();
while(sqldr.Read()) {
dr = dt.NewRow();
dr["Field1"] = sqldr["Field1"];
dr["Field2"] = sqldr["Field2"];
dr["Field3"] = sqldr["Field3"];
dr["Field4"] = sqldr["Field4"];
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;

※Select文など長い部分は一部略しています。

ここでdt.Columns.Addで追加した(Field1などの)
Columnsのスタイルを設定したいのですが、方法がわかりません。

おそらく、Field1などのItemStyleの設定が出来ればOKなのではないかという
気はあるのですが、DataColumnには
ItemStyleがなくスタイルの設定できません。

方法をご存知の方がおられましたら、ご教授いただけませんでしょうか?
よろしくお願いいたします。
はじめまして、H.K.R.と申します。

 私はASP.NETについてはほとんど無知なので、
 もし変なことを書いていたら申し訳ないのですが、
 以下のコードでとりあえずGridViewのHeader行のStyleをいろいろと設定することができましたので、
 試してみてはいかがでしょうか?

 ※ 私が試した環境:WindowsXPHomeSP2、InternetExplorer7、ASP.NET開発サーバー、
           VisualWebDeveloper2008ExpressEdition(対象Frameworkは、.NET Framework 2.0)
 ※ 言語がVBですがご了承下さい。m(_ _)m

Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    ' GridView1がデザイナで配置されていることを前提とする
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        testE()
        MyBase.OnLoad(e)
    End Sub

    Private Sub testE()
        If Me.IsPostBack = False Then

            Me.GridView1.DataSource = Me.CreateDataSource2()

            ' ↓Falseでも試してみてください。
            If True Then
                Dim AddressOf_GridView1_RowDataBound As New GridViewRowEventHandler(AddressOf Me.GridView1_RowDataBound)
                AddHandler Me.GridView1.RowDataBound, AddressOf_GridView1_RowDataBound
                Me.GridView1.DataBind()
                RemoveHandler Me.GridView1.RowDataBound, AddressOf_GridView1_RowDataBound
            Else
                Me.GridView1.DataBind()
                Me.GridView1.HeaderStyle.BackColor = Color.Red
                Me.GridView1.HeaderRow.Cells(0).BackColor = Color.Aqua
                Me.GridView1.HeaderRow.Cells(0).Style.Add("width", "400px")
            End If
        Else
            ' とりあえず何もしない
        End If
    End Sub

    Private Function CreateDataSource2() As ICollection
        Dim dt As New DataTable
        dt.Columns.Add(New DataColumn("Field1", GetType(String))) ' C#の場合はtypeof(String)
        dt.Columns.Add(New DataColumn("Field2", GetType(String)))
        dt.Columns.Add(New DataColumn("Field3", GetType(String)))
        dt.Columns.Add(New DataColumn("Field4", GetType(String)))

        For i As Integer = 1 To 7
            Dim dr As DataRow = dt.NewRow
            For j As Integer = 1 To dt.Columns.Count
                dr.Item(j - 1) = String.Format("{0}行目のデータ{1}", i, j)
            Next
            dt.Rows.Add(dr)
        Next
        Dim dv As New DataView(dt)
        Return dv
    End Function

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.Header Then
            For i As Integer = 0 To e.Row.Cells.Count - 1
                Dim tc As TableCell = e.Row.Cells(i)
                tc.BackColor = Color.Blue
                tc.Text += String.Format(" - 追加({0})", i + 1)
                tc.Attributes.Add("onclick", String.Format("alert('{0} をクリックしました。');", tc.Text))
                tc.Style.Add("width", "400px")
            Next
        End If
    End Sub

End Class

以上です。
H.K.R.さん。ありがとうございます。

HeaderStyleとか
HeaderRow.Cells(0).
でStyleを変更できるんですね。

おかげさまでいろいろと情報も検索することが出来、
実現したい処理も実装出来ました。

どぼんに結構載っていましたね。(^^;
http://dobon.net/vb/dotnet/datagridview/cellstyle.html

列については、↑にのっている
Columns[0].DefaultCellStyle
だとなぜか(DefaultCellStyleが定義されてない)
エラーになるのですが、
GridView1.Columns[0].ItemStyle
を使うことで問題なくスタイル変更が出来ました。

助かりました。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板