VB C# .NET Freamworkの備忘録

C#, VB.NET Freamworkの備忘録を掲載しています。 コントロール、WPF、スレッド、共通関数と実用的なコードを掲載してきます。


WindowsFormのDataGridViewに以下のイベントを追加することで、
オブジェクトに「○○.××」のようなバインディングを可能とする



        /// <summary>
        /// セルの内容が書式用に変更されなければならない時にコールバックされます。
        /// </summary>
        /// <param name="sender">イベント発生元</param>
        /// <param name="e">イベント引数</param>
        private void dgvSettingList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            EventUtils.Grid_CellFormatting(sender, e);
        }

補助クラス

    public class EventUtils
    {

        /// <summary>
        /// グリッドのバインディングの値をコールバックします。
        /// </summary>
        /// <param name="sender">イベント発生元</param>
        /// <param name="e">イベント引数</param>
        public static void Grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            var grid = (DataGridView)sender;
            if ((grid.Rows[e.RowIndex].DataBoundItem != null) &&
                (grid.Columns[e.ColumnIndex].DataPropertyName.Contains(".")))
            {
                e.Value = PropertyUtils.BindProperty(
                              grid.Rows[e.RowIndex].DataBoundItem,
                              grid.Columns[e.ColumnIndex].DataPropertyName
                            );
            }
        }
    }

     public static class PropertyUtils
    {
       public static string BindProperty(object property, string propertyName)
        {
            string retValue = "";

            if (propertyName.Contains("."))
            {
                var leftPropertyName = propertyName.Substring(0, propertyName.IndexOf(".", System.StringComparison.Ordinal));
                var arrayProperties = property.GetType().GetProperties();

                foreach (PropertyInfo propertyInfo in arrayProperties)
                {
                    if (propertyInfo.Name == leftPropertyName)
                    {
                        retValue = BindProperty(
                          propertyInfo.GetValue(property, null),
                          propertyName.Substring(propertyName.IndexOf(".", System.StringComparison.Ordinal) + 1));
                        break;
                    }
                }
            }
            else
            {
                var propertyType = property.GetType();
                var propertyInfo = propertyType.GetProperty(propertyName);
                retValue = propertyInfo.GetValue(property, null).ToString();
            }

            return retValue;
        }

    } 

DBはI/Oの負荷が高いため、I/O負荷を軽減することで
パフォーマンスを向上することができます。

インデックスの断片化を解消
⇒添付ファイルを参照
インデックスを再構築する際に、統計情報が更新される。
インデックスを効率よく使用するもの。
SELECT 'ALTER INDEX ' + '[' + C.name + ']' + ' ON [' + D.name + '].[' + B.name + '] REBUILD' cmd,     
             D.name AS schemaname,     
             B.name AS table_name,     
             C.name AS index_name,     
             C.index_id,
             A.partition_number,
             A.avg_fragmentation_in_percent,
             A.page_count
  FROM sys.dm_db_index_physical_stats (DB_ID(),null,null,null,null) as A
    JOIN  sys.objects AS B
      ON  A.object_id = B.object_id
    JOIN  sys.indexes AS C
      ON  A.object_id = C.object_id  AND A.index_id = C.index_id
    JOIN  sys.schemas D
      ON  B.schema_id = D.schema_id
WHERE B.type = 'U'
      and C.index_id > 0
      and A.page_count > 1000
      and A.avg_fragmentation_in_percent > 30
ORDER BY A.avg_fragmentation_in_percent DESC;

メールアドレスの正規表現

^([a-zA-Z0-9_/\.\-\?\+])+\@([a-zA-Z0-9]+[a-zA-Z0-9\-]*\.)+[a-zA-Z0-9\-]+$

使用方法

        /// <summary>
        /// EMail1
        /// </summary>
        private string eMail1;
        [RegularExpression(@"^([a-zA-Z0-9_/\.\-\?\+])+\@([a-zA-Z0-9]+[a-zA-Z0-9\-]*\.)+[a-zA-Z0-9\-]+$", ErrorMessage = CommonMessage.E10051)]
        public string EMail1
        {
            get { return eMail1; }
            set
            {
                if (eMail1 != value)
                {
                    eMail1 = value;
                    this.OnPropertyChanged("EMail1");
                    this.Validate("EMail1", value);
                }
            }
        }

↑このページのトップヘ