- - PR -
DataGridのエラー・マーク表示時に、値が表示されない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-04-09 20:37
環境:VisualStudio 2003
言語:C# 現象ataGridのカラムのスタイルを下記の様に設定した場合、!のアイコンは表示されるが、値は表示されない。 - DataTableのデータ型がint - AlignmentがHorizontalAlignment.Right AlignmentをHorizontalAlignment.Leftにすると表示される。 また、データ型をStringにすると、HorizontalAlignment.Rightでも表示される。 ソースは以下の通りです。 "ID"の値が100より大きい時、アイコンを表示するようにして有ります。 何が悪いのでしょうか?分かる方がいらっしゃいましたら、回答をよろしくお願いします。 =============================================================== using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace WindowsApplication1 { /// <summary> /// Form1 の概要の説明です。 /// </summary> public class Form1 : System.Windows.Forms.Form { // テーブルの列を作成 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1; private System.Windows.Forms.DataGrid dataGrid1; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // } /// <summary> /// 使用されているリソースに後処理を実行します。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows フォーム デザイナで生成されたコード /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> private void InitializeComponent() { this.dataGrid1 = new System.Windows.Forms.DataGrid(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); // // dataGrid1 // this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(8, 32); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(272, 144); this.dataGrid1.TabIndex = 0; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 12); this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.Add(this.dataGrid1); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void Form1_Load(object sender, System.EventArgs e) { dataTable1 = dataSet1.Tables.Add("商品テーブル"); DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int)); DataColumn dataClumn2 = dataTable1.Columns.Add("商品"); DataColumn dataClumn3 = dataTable1.Columns.Add("個数", typeof(int)); { DataGridTextBoxColumn columnStyle1 = new DataGridTextBoxColumn(); DataGridTextBoxColumn columnStyle2 = new DataGridTextBoxColumn(); DataGridTableStyle tableStyle = new DataGridTableStyle(); tableStyle.MappingName = dataTable1.TableName; //マップ名を指定する dataGrid1.TableStyles.Add(tableStyle); //テーブルの列のスタイルを作成 columnStyle1.MappingName = "ID"; columnStyle1.Alignment =HorizontalAlignment.Right; tableStyle.GridColumnStyles.Add(columnStyle1); columnStyle2.MappingName = "商品"; columnStyle2.Alignment =HorizontalAlignment.Right; tableStyle.GridColumnStyles.Add(columnStyle2); } dataTable1.DefaultView.AllowNew = false; // テーブルにデータを追加 dataTable1.Rows.Add(new Object[] {1, "みかん", 100}); dataTable1.Rows.Add(new Object[] {2, "りんご", 300}); dataTable1.Rows.Add(new Object[] {3, "バナナ", 120}); dataTable1.Rows.Add(new Object[] {4, "すいか", 280}); dataTable1.Rows.Add(new Object[] {5, "いちご", 200}); dataTable1.Rows.Add(new Object[] {6, "メロン", 150}); // セルのデータが変更されたときのイベントハンドルする dataSet1.Tables[dataTable1.TableName].ColumnChanging += new DataColumnChangeEventHandler(this.dataSet1_ColumnChanging); // データグリッドにテーブルを表示する dataGrid1.SetDataBinding(dataTable1.DefaultView, ""); } /// <summary> /// DataGrid内のテーブルのセルが変更されたイベントをハンドルする /// </summary> private void dataSet1_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName.Equals("ID")) { int iOldValue = (int)e.Row[e.Column]; int iNewValue = (int)e.ProposedValue; // 100個より大きい値が設定されているか if (iNewValue > 100) { e.Row.SetColumnError(e.Column,"error"); throw new Exception("error"); } } if (e.Column.ColumnName.Equals("商品")) { //必ずエラー e.Row.SetColumnError(e.Column,"error"); throw new Exception("error"); } } } } |
|
投稿日時: 2007-04-09 21:10
誘導。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37805&forum=7&2 |
1