[C#]Rắc rối với RegEx trong DataGridView

Thảo luận trong 'Phần mềm' bắt đầu bởi anhtu07, 5/10/11.

  1. anhtu07

    anhtu07 T.E.T.Я.I.S Lão Làng GVN

    Tham gia ngày:
    22/11/08
    Bài viết:
    654
    Em có 1 cái datagridview, hiện danh sách danh bạ, em muốn khi giới hạn số ký tự nhập vào ở cột HoTen là 30 ký tự thôi, nếu nhập hơn thì sẽ có thông báo, em dùng RegEx để so sánh cái chuỗi nhập vào nhưng khi nhập ít hơn 30 ký tự vẫn bị nhận thông báo nhắc nhở. Đây là code của em:
    [C#]
    Mã:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Windows.Forms;
    
    namespace demoRegExWithDGV
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'demoRegexDataSet.DanhBa' table. You can move, or remove it, as needed.
                this.danhBaTableAdapter.Fill(this.demoRegexDataSet.DanhBa);
    
            }
    
            private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
            {
                DataGridViewColumn currentCol = dataGridView1.Columns[e.ColumnIndex];
                DataGridViewCell currentCel = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
                if (currentCol.Name == "HoTen")
                {
                    MessageBox.Show(currentCel.FormattedValue.ToString().Length.ToString());
                    if (KiemTraChieuDaiChuoi(currentCel.FormattedValue.ToString()) == false)
                    {
                        MessageBox.Show("Không được nhập nhiều hơn 30 ký tự");
                    }
                }
            }
    
            private bool KiemTraChieuDaiChuoi(string p)
            {
                Regex ex = new Regex(@"^\w{1,30}$");
                return ex.IsMatch(p);
            }
        }
    }
    
    
    Đây là CSDL
    mediafire.com/?wol418u8p8i9fro

    cái RegEx của em zậy là đúng hay sai?
     
  2. ZDragon

    ZDragon Legend of Zelda Lão Làng GVN

    Tham gia ngày:
    12/6/08
    Bài viết:
    1,198
    Nơi ở:
    Hang Thỏ
    Mình không rành về C# nên phát biểu ngu tý:
    Regex ex = new Regex(@"^\w{1,30}$") có thể chuyển thành Regex ex >= new Regex(@"^\w{1,31}$") không? hoặc Regex ex > new Regex(@"^\w{1,30}$")?
     
  3. dark_dragons

    dark_dragons Hyperion Captain ‍ ⚚ Mystic Mage ⚚ Moderator Lão Làng GVN

    Tham gia ngày:
    9/6/08
    Bài viết:
    22,146
    Nơi ở:
    TP. HCM
    http://forum.gamevn.com/forumdisplay.php?154 :)
     
  4. Senjuro

    Senjuro Viva la no title Lão Làng GVN

    Tham gia ngày:
    4/11/06
    Bài viết:
    9,880
    Không rành và cũng không có cảm tình về Regular Expression lắm, nhưng nếu bạn chỉ muốn giới hạn ký tự nhập vào GridView là 30 thôi thì sao không dùng string.lenght để bắt lỗi nhỉ?
     
  5. dark_dragons

    dark_dragons Hyperion Captain ‍ ⚚ Mystic Mage ⚚ Moderator Lão Làng GVN

    Tham gia ngày:
    9/6/08
    Bài viết:
    22,146
    Nơi ở:
    TP. HCM
    ^ Hình như hàm đó là string.length mà sư huynh X_X
    Gõ kiểu sư huynh vào lập trình thì báo lỗi chết luôn áh :">
     
  6. Senjuro

    Senjuro Viva la no title Lão Làng GVN

    Tham gia ngày:
    4/11/06
    Bài viết:
    9,880
    À uh do tớ type nhanh quá. Với lại code toàn gõ vài từ rồi Ctrl + space ra nên không có vụ báo lỗi đấy đâu =))
     
  7. tdloc

    tdloc Dragon Quest

    Tham gia ngày:
    30/4/09
    Bài viết:
    1,360
    Nơi ở:
    20th Century
    Mình test thử cái Regex của bạn thấy chạy đúng.

    Nếu bạn nhập các ký tự đặc biệt thì nó sẽ hiện thông báo nhắc nhở.
     

Chia sẻ trang này