none
動的に追加したカラムにHeaderStyleを設定するには? RRS feed

  • 質問

  •  

    ASP.NET(vb)を使用しております。ASP1.1。

     

    下記のプログラムにて動的に追加したカラムにHeaderStyleを追加したいと考えております

     

            Dim dt As New DataTable
            Dim D_row As DataRow

            dt.Columns.Add(New DataColumn("A", GetType(String)))
            dt.Columns.Add(New DataColumn("B", GetType(String)))
            dt.Columns.Add(New DataColumn("C", GetType(String)))
            dt.Columns.Add(New DataColumn("D", GetType(String)))

            D_row = dt.NewRow()

            D_row(0) = "Aの内容"

            D_row(1) = "Bの内容"

            D_row(2) = "Cの内容"

            D_row(3) = "Dの内容"

     

       dt.Rows.Add(D_row)

     

           DtGrid.DataSource = dt
           DtGrid.DataBind()

           DtGrid.Columns(0).HeaderStyle.CssClass = "AA" ・・・①
           DtGrid.Columns(0).ItemStyle.CssClass = "AA"

     

     と記述したところ「"インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。」というエラーが①の所で発生します。

     

     動的に追加したカラムにはコレクション番号が付かない仕様のようですが

     なんとか他の方法は無いでしょうか?

     

     ご存じの方ご教授の程、何卒よろしくお願い申し上げます。

     

     

       

    2008年6月5日 14:16

回答

  • 自分の環境 (Vista + VWD2008 Express Edition + IE7) で試した限りでは問題なく

    css が設定できましたが? ご参考にそのコードをアップしておきますね。以前、このフォ

    ーラムの別のスレッドにアップしたサンプルに手を加えただけですので、C# でかつ余計

    なコードが含まれていて、読みにくい点はすみません。

     

    Code Snippet

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

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">
        //ICollection CreateDataSource()
        DataTable CreateDataSource()
        {
            DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
            dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
            dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
            for (int i = 0; i < 3; i++)
            {
                dr = dt.NewRow();
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = 1.23 * (i + 1);
                dt.Rows.Add(dr);
            }
            //DataView dv = new DataView(dt);
            //return dv;
            return dt;
        }

        void Page_Load(Object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ItemsGrid.DataSource = CreateDataSource();
                ItemsGrid.DataBind();
                ItemsGrid.Columns[0].HeaderStyle.CssClass = "style2";
                ItemsGrid.Columns[0].ItemStyle.CssClass = "style1";
            }
        }

        protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (args.Value != "abc")
            {
                args.IsValid = false;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (Page.IsValid == false)
            {
                Label1.Text = String.Empty;
                return;
            }
            Label1.Text = "Validated!";
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>DataGrid 上での CustomValidator</title>
        <style type="text/css">
            .style1
            {
                background-color: #990000;
                font-weight: bold;
                color: White;
            }
            .style2
            {
                background-color: #FFFBD6;
                font-weight: bold;
                color: #333333;
            }
        </style>
    </head>
    <body>
        <form id="form2" runat="server">
        <div>
            <asp:DataGrid id="ItemsGrid"
                runat="server"
                AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333"
                GridLines="None">
                <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <SelectedItemStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                <AlternatingItemStyle BackColor="White" />
                <ItemStyle BackColor="#FFFBD6" ForeColor="#333333" />
                <Columns>
                    <asp:BoundColumn
                        HeaderText="Number"
                        DataField="IntegerValue"/>
                    <asp:BoundColumn
                        HeaderText="Item"
                        DataField="StringValue"/>
                    <asp:BoundColumn
                        HeaderText="Price"
                        DataField="CurrencyValue" />
                    <asp:TemplateColumn HeaderText="Input">
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"
                                Display="Dynamic">*</asp:RequiredFieldValidator>
                            <asp:CustomValidator ID="CustomValidator1" runat="server"
                                ErrorMessage="CustomValidator" ControlToValidate="TextBox1"
                                Display="Dynamic" onservervalidate="CustomValidator1_ServerValidate"
                                ClientValidationFunction="ClientValidate">*
                            </asp:CustomValidator>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            </asp:DataGrid>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            <asp:Label ID="Label1" runat="server"></asp:Label>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server"
                HeaderText="ヘッダーテキスト" />
        </div>
        </form>
    </body>
    </html>
    <script type="text/javascript">
        <!--
        function ClientValidate(source, clientside_arguments)
        {
            if (clientside_arguments.Value == "abc")
            {
                clientside_arguments.IsValid = true;
            }
            else
            {
                clientside_arguments.IsValid = false;
            }
        }
        //-->
    </script>

     

     

     

    2008年6月7日 1:06

すべての返信

  • 自分の環境 (Vista + VWD2008 Express Edition + IE7) で試した限りでは問題なく

    css が設定できましたが? ご参考にそのコードをアップしておきますね。以前、このフォ

    ーラムの別のスレッドにアップしたサンプルに手を加えただけですので、C# でかつ余計

    なコードが含まれていて、読みにくい点はすみません。

     

    Code Snippet

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

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">
        //ICollection CreateDataSource()
        DataTable CreateDataSource()
        {
            DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
            dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
            dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
            for (int i = 0; i < 3; i++)
            {
                dr = dt.NewRow();
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = 1.23 * (i + 1);
                dt.Rows.Add(dr);
            }
            //DataView dv = new DataView(dt);
            //return dv;
            return dt;
        }

        void Page_Load(Object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ItemsGrid.DataSource = CreateDataSource();
                ItemsGrid.DataBind();
                ItemsGrid.Columns[0].HeaderStyle.CssClass = "style2";
                ItemsGrid.Columns[0].ItemStyle.CssClass = "style1";
            }
        }

        protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (args.Value != "abc")
            {
                args.IsValid = false;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (Page.IsValid == false)
            {
                Label1.Text = String.Empty;
                return;
            }
            Label1.Text = "Validated!";
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>DataGrid 上での CustomValidator</title>
        <style type="text/css">
            .style1
            {
                background-color: #990000;
                font-weight: bold;
                color: White;
            }
            .style2
            {
                background-color: #FFFBD6;
                font-weight: bold;
                color: #333333;
            }
        </style>
    </head>
    <body>
        <form id="form2" runat="server">
        <div>
            <asp:DataGrid id="ItemsGrid"
                runat="server"
                AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333"
                GridLines="None">
                <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <SelectedItemStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                <AlternatingItemStyle BackColor="White" />
                <ItemStyle BackColor="#FFFBD6" ForeColor="#333333" />
                <Columns>
                    <asp:BoundColumn
                        HeaderText="Number"
                        DataField="IntegerValue"/>
                    <asp:BoundColumn
                        HeaderText="Item"
                        DataField="StringValue"/>
                    <asp:BoundColumn
                        HeaderText="Price"
                        DataField="CurrencyValue" />
                    <asp:TemplateColumn HeaderText="Input">
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"
                                Display="Dynamic">*</asp:RequiredFieldValidator>
                            <asp:CustomValidator ID="CustomValidator1" runat="server"
                                ErrorMessage="CustomValidator" ControlToValidate="TextBox1"
                                Display="Dynamic" onservervalidate="CustomValidator1_ServerValidate"
                                ClientValidationFunction="ClientValidate">*
                            </asp:CustomValidator>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            </asp:DataGrid>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            <asp:Label ID="Label1" runat="server"></asp:Label>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server"
                HeaderText="ヘッダーテキスト" />
        </div>
        </form>
    </body>
    </html>
    <script type="text/javascript">
        <!--
        function ClientValidate(source, clientside_arguments)
        {
            if (clientside_arguments.Value == "abc")
            {
                clientside_arguments.IsValid = true;
            }
            else
            {
                clientside_arguments.IsValid = false;
            }
        }
        //-->
    </script>

     

     

     

    2008年6月7日 1:06
  • こんにちは。中川俊輔 です。

     

    SurferOnWwwさん、回答ありがとうございます。

     

    kngw1018さん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    まだ解決していないようでしたら、ぜひまた質問してみてください!

    有用な情報と思われたため、SurferOnWwwさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    kngw1018さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年6月26日 9:19