文章分類/Infragistics
【概述】 我想根據 Shift JIS 中的位元組長度來設定 UltraGrid 儲存格中輸入字元數的上限。
[適用元件] 超網格 【適用版本】 所有版本 [文章類型] 常問問題 【細節】
NetAdvantage 沒有內建功能來限製位元組長度的字元數。對於UltraGrid,可以透過處理CellChange事件、轉換字串並在字串變更時編輯位元組長度來實現類似的處理。
(C# 範例)
/// /// バイト数判定に用いるShiftJis用Encoding /// 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; } } }