none
dataGridにTableStyleを設定する方法 RRS feed

  • 質問

  • 田中と申します。

    アクセス型データベースからOleDbDataAdapterで読み出し、データービュー
    (下のAppCommon.DbDataExPrj.Viewがデータビュー)に内容を設定しています。

    このデータービューをdataGridに設定してデータの読み出しを行って
    おり、読み出し自体は上手くいっています。

    しかし、TableStyleを設定しようと以下のとおり記述しましたが上手くいきません。
    マッピングが上手く行っていないようで一行目を記述すると、
    「インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小
    さくなければなりません。」とエラーが出て、データ自体を読み出すことすらもでき
    なくなってしまいます。
    この記述を削除するとデータは読み出せますが、TableStyleは設定されていません。

    データービューを使用してTableStyleを設定するにはどのようにすると
    良いでしょうか。
    どなたか、ご教授いただけましたら幸いです。

     

    dataGrid1.TableStyles[0].MappingName ="prjtbl";    
    dataGrid1.DataSource= AppCommon.DbDataExPrj.View;

    DataGridTableStyle dgt = new DataGridTableStyle();
    dgt.MappingName = "prjtbl";

    DataGridTextBoxColumn Aqdgtbc = new DataGridTextBoxColumn();
    Aqdgtbc.Alignment=HorizontalAlignment.Center;
    Aqdgtbc.MappingName = "prj_kisoku";
    Aqdgtbc.HeaderText= "規則";
    Aqdgtbc.Width= 100;
    dgt.GridColumnStyles.Add(Aqdgtbc);
    //以下DataGridTextBoxColumnを必要数配置

    dataGrid1.TableStyles.Add(dgt);

    2006年4月9日 8:03

すべての返信

  • 諸農です。

     田中 さんからの引用

    マッピングが上手く行っていないようで一行目を記述すると、
    「インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小
    さくなければなりません。」とエラーが出て、データ自体を読み出すことすらもでき
    なくなってしまいます。
    この記述を削除するとデータは読み出せますが、TableStyleは設定されていません。

    試していませんけど「インデックスが範囲を超えている」と言うことは、つまり、最初の「dataGrid1.TableStyles[0]」の時点ではまだテーブルスタイルが一つもコレクションに追加されていないってことだと想像できますね。データソースをセットする前に、自前のカスタマイズされたテーブルスタイルを追加してからデータソースをセットしてみたらどうでしょうか。

     

    2006年4月9日 8:51
  • 諸農 様、ご回答いただきありがとうございました。
    いつぞやは、メールクライアントの件でお世話になりました。

    dataGrid1.TableStyles[0].MappingName ="prjtbl";   
    の部分を最後に記述しても同じ(エラーは発生しないが、スタイルは登録されない)でした。

    dataGrid1.DataSource= AppCommon.DbDataExPrj.View;
    また、この部分を最後に記述しても同じ(MappingNameの行が記述されていたら同じエラー)
    でした。

    この、データベース部分は、クラスにまとめて記述されているもので、読み出し
    等については、コンポーネントの配置ではなく動的に行われています。

    自分で、datasetコンポーネントを配置して自動生成されたコードを使った
    場合はスタイルを上手く登録することができています。

    2006年4月9日 9:23
  • どの行がどういう目的で書かれているのかをきちんと理解しましょう。

    >dataGrid1.TableStyles[0].MappingName ="prjtbl";    
    >dataGrid1.DataSource= AppCommon.DbDataExPrj.View;
    >
    >DataGridTableStyle dgt = new DataGridTableStyle();
    >dgt.MappingName = "prjtbl";
    >
    >DataGridTextBoxColumn Aqdgtbc = new DataGridTextBoxColumn();
    >Aqdgtbc.Alignment=HorizontalAlignment.Center;
    >Aqdgtbc.MappingName = "prj_kisoku";
    >Aqdgtbc.HeaderText= "規則";
    >Aqdgtbc.Width= 100;
    >dgt.GridColumnStyles.Add(Aqdgtbc);
    >//以下DataGridTextBoxColumnを必要数配置
    >
    >dataGrid1.TableStyles.Add(dgt);

    1行目のdataGrid1.TableStyles[0].MappingName ="prjtbl";    の時点において、TableStyleは未だ一つも登録されていないため、最初(一番目)のTableStyleを指定しているdataGrid1.TableStyles[0]は当然エラーになります。最後の、
    dataGrid1.TableStyles.Add(dgt);
    によって、初めてTableStyleが一つ追加され、dataGrid1.TableStyles[0]はdgtを指すようになります。
    というわけで、1行目は全く必要ありません。

    >dataGrid1.TableStyles[0].MappingName ="prjtbl";   
    >の部分を最後に記述しても同じ(エラーは発生しないが、スタイルは登録されない)でした。

    テーブルスタイルが登録されていないわけではありません。登録されていなければ、dataGrid1.TableStyles[0].MappingName ="prjtbl"; を実行した段階で、最初に質問されたのと同じエラーになります。
    原因としては、まず、"prjtbl"がビューの名前と異なっていることが疑われます。

    2006年4月9日 14:43
    モデレータ
  • trapemiya 様

    ご回答ありがとうございます。

    >原因としては、まず、"prjtbl"がビューの名前と異なっていることが疑われます。
    データベース中のテーブル名が"prjtbl"となっていたもので、てっきりこれがビューの
    名前かと勘違いしていました。

    AppCommon.DbDataExPrj.Table.TableNameで名前を確認したところ、別名になって
    おり、"prjtbl"の部分を入れ替えることで上手くいきました。

    皆さん、大変お世話になりました。

     

     

    2006年4月9日 20:13