【KBJ10059】UltraGridのセルの文字数をシフトJISのバイト数で設定したい

0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター

トップ 10 投稿者 
男性
投稿 45
IG Employee
[IG] 山田 達也 投稿済み: 2010/3/31 19:46

 

【概要】
UltraGridのセルの入力文字数の上限値を、シフトJISでのバイト長を基準に設定したい
 
【該当するコンポーネント】
UltraGrid
 
【該当するバージョン】
全てのバージョン
 
【記事の種類】
FAQ
 
【詳細】
NetAdvantageのビルドイン機能としてはバイト長での文字数制限を行う機能はありません。
UltraGridの場合、CellChangeイベントをハンドルし、文字列が変更されたタイミングで文字列の変換とバイト長での編集を行うことで、同様の処理を実現することができます。
 
(C#のサンプル)
 
        /// <summary>
        /// バイト数判定に用いるShiftJis用Encoding
        /// </summary>
        public Encoding ShiftJisEncoding
        {
            get
            {
                return Encoding.GetEncoding("shift-jis");
            }
        }
 
        private void ultraGrid1_CellChange(object sender, CellEventArgs e)
        {
            //Text列のときのみ処理を行います
            if (e.Cell.Column.Key == "Text")
            {
                //バイト長
                int length = (int)e.Cell.Row.Cells["Length"].Value;
 
                //ShiftJisでのバイト配列を取得します
                byte[] bs = ShiftJisEncoding.GetBytes(e.Cell.Text);
               
                //指定の長さよりもバイト長が長い場合
                if (bs.Length > length)
                {
                    //最後の文字が漢字の上位バイトであれば、無視します
                    byte last = bs[length - 1];
                    if ((last >= 0x81 && last <= 0x9f) || (last >= 0xe0 && last <= 0xfc))
                    {
                        length -= 1;
                    }
                   
                    e.Cell.Value = ShiftJisEncoding.GetString(bs, 0, length);
                    //カーソルの位置が最後にくるように調整します
                    e.Cell.SelStart = e.Cell.Text.Length;
                   
                }
            }
           
        }

 

  • 以下に保存:
ページ 1 / 1 (1 項目) | RSS
Infragistics Japan
インフラジスティックス ジャパン